Probably like most community based products - which ravel into some development chaos that we all enjoy - one sane thing to do would be to Keep It Flat. What i mean by this:
Let's say the Drupal core code is level 1.
Drupal Ubercart would be level 2.
All those helpful and devilish modules on top of Ubercart would be level 3.
This pattern can be applied easily to all directions of D development.
What you need to ask yourself is: am i really going to build something on top of level >= 3 ?