I am all for making flexible API that can be easily enhanced, but I am
against making everything protected or especially public - classes
have some interdependency that needs to be preserved in order for the
API to remain stable. Individual classes are not meant to be
instantiated individually -- they are designed to be instantiated by
the main api module. Extending classes and adding them to the list of
available modules is fine.
Limits: yes, they should be configurable by global settings.
mModules: At this point I think a hook would be most suitable to allow
extensions to change the list.