Doesn't module_rebuild_cache automatically recurse all subdirectories within sites/all/modules and sites/sitename/modules?
Yes it does.
The simple way to do what I think you're trying to do is put global modules in sites/all/modules, keep site specific modules in site specific subdirectories (sites/sitename-1/modules, sites/sitename-2/modules...) and assign permissions to user roles as appropriate.