Create Libu, which provides a common sdk, this is usually a set of abstract classes. Create a class Plugin which contains the necessary entry point usually is init in order for the plugin said that he can load to plug-in started to carry out its features and unload, to discharge. Next, make Manager most of these plugins, which has pointers to all the available plugins, it is already cleaning up what to download and what is not, and resolves things like dependencies between plugins.
To work this bunch will be just as fast as a monolithic application, but each plugin will be the only brick and will be much easier to debug. This kind has little effect on the loading speed of the app (you must still do some extra movements in the runtime) and slightly to the memory footprint. You can organize the exchange opening event between plugins, but it is much easier and faster to make plugins implementations of some interfaces and an exchange event to use only a small part of the plugin where it is really needed.