I wouldn't do this in a "Visual *" or in a "* Basic" type of language.
You should check out libbitcoin. I studied the source and they are using modern and modular c++ concepts. IMHO this is the way to do it. Also their approach to asynchronous communication and concepts like continuations / completions / futures is very nice.
That said, I think Bitcoin (the reference implementation) is too complicated for an OOP module approach to produce working and correct algorithms unless we do a major refactoring of the code base - and here probably a reimplementation from scratch is the best thing.