maybe not plugins for plugins.
maybe some base functionality inside c::b like services. these provide interface and API. the work internally with plugins that implement and parametrize the service.
then, outside, plugins that use the services through their public interface.
that way the plugins wont be depending on each other. only outside plugins on services.
maybe some functionalities of c::b are already so general, that actually no one ever unloads the plugin representing that functionality. maybe some things have been plugins for so long that nobody questions if they really should be plugins... or at least plugins directly exposed to the user. defintely if one looks at the plugins today, there are already two groups of them: those that one virtually HAS to use in order to do anything with an IDE, and then all the others...
for instance an IDE would likely always offer some compiler. well, that compiler would be a service, the service to be able to compile something. inside the service there would be plugins to specialize the service, for instance being of type gcc or intel compiler, local or distant, etc.
AST would be a general service specialized by plugin for each language. it would be used outside by plugins like CC or refactoring or searching or statistics or symbol browser or whatever.
just thinking. most probably this would be so great a change it is not worth while. not to repeat the netscape experience... by all means.