Perhaps if $VERSION isn't defined and then require fails, base.pm could search for any subroutines being defined in the requested package and, if there are some, produce a much more verbose message about how they now need to define $VERSION for the in-lined module to work with this fixed release of base.pm.
A failed require can have created subs, so the check would have to have preceeded the require.
I know it's a trivial added inefficiency, but it's just one more reason to hate using base
just as syntactic sugar.