Module API needs a new function check_depends_multiple that should have the ability to resolve dependencies, automatically adding any modules (and checking their dependencies as it goes) that are required. It should be passed an array of modules by reference, and it may add to that array for any additional modules required. Only if there is some unresolvable dependency (eg, an unmet engine dependency, or a non-existant module) should it fail.
The Web UI and the module_admin script should both use this method by default (allowing you to confirm). module_admin should get a flag --no-auto-depends (or something) to override this behaviour.