What I'm moving towards is what SVK does. It has an SVK::Version module which simply defines $SVK::VERSION. Then in other modules you can write:
use SVK::Version; our $VERSION = $SVK::VERSION;
That way it will be picked up by most $VERSION scanners.
See my post further up about syncronised versions. In that context, I think this is a bad idea. Old modules that should no longer be loaded will display the correct version and can't be detected.
Assuming that SVK is using Class::Autouse (which I know it is) and is using the recursive loaded (which I don't know about) then SVK is behaving incorrectly in this regard.
Adam K