Thanks for the kind words.
I'm not sure I understand your question, but maybe this will help. If you have a bunch of tables that are all part of the same project, it makes sense for them to all have the same table prefix and be part of the same package, but they should probably have a different prefix than the table prefix for other projects, and a different package name. There's no real harm in mixing them together, but if they're separate, addPackage() will load only the classes it needs for the current task.
The schema is used to create the class and map files for all objects listed in it, and usually it will have only one package. Each object will have its own table (specified in the schema). Once the class and map files have been created, the schema's job is done (in fact, MODX/xPDO ignores it completely during normal operations). addPackage() goes strictly by the path you provide and loads all classes in that path.
BTW, if you will have intersect tables (aka intersect objects) like customer_orders and order_products (and I think you will), you'll need to manually edit the schema to add aliases for the "related objects" before generating the class and map files. That way, you'll be able to do things like this:
$customer->getMany('Orders');
$order->getMany('Products');
$order->getOne('Customer');
See the Doodles tutorial or the MODX schema (core\model\schema\modx.mysql.schema.xml) for examples. The Articles extra is also a fairly simple example of a package with multiple, related tables. Its schema file is here: core\components\articles\model\schema\articles.mysql.schema.xml