I see little justification for not doing so. that's modularity, loose coupling and possibly several other important design principals that's backing this up.
If you start to couple, bind, and inter connect components in the system you loose its modularity and lots of other OOD benefits. Soon, you'll get to one class/controller peeking and using other class methods/properties, starting to "know" about other classes internals and you're next stop is a few months down the road, trying to figure how to untangle this mess/spaghetti-code... .
Ok, you might say, "so I'll take it. What do I do with siteController that needs to use this Model class?". If your application must be using that module that's fine - make a check in its beginning and "complain" as you see fit (error 500, 400, whatever fits this best for you). Also, here's comes into play my lack of knowledge in design patterns. From what I know, how about having some component (in protected/components) that serve as a "factory" for the needed model? Maybe have some abstract class in the application level (component as well) and that module would extend (or implement, in case of an interface) it? (that of course requires considering the changes on the module's end). this factory will contain the knowledge about that module, check if it exists, complain if not, possibly instantiate some substitute class, etc. siteController should be (highly) preferably not binded to the module's model class.
I hope this contributes... .