A couple of API changes I think would make things cleaner:
You shouldn't have to have %EXPORTER as a global (use vars, our) variable. Instead (or additionaly), you should be able to pass a hashref (or just a hash?).
You should be able to specifiy hard references instead of symbol names. (Together, these two would let you avoid having any globals if you want -- and I want.)
Instead of having that single function call in what is otherwise a purely declarative API, have a key value of '' mean "symbol name same as export name". (Perhaps a value of undef should mean that the import is silently ignored -- I'm not sure if such a thing should be encouraged, though.)
Perhaps you could autogenerate the direct-callable functions (IE create a sub foo{} that calls the correct foo_old or foo_new, if sub foo doesn't exist).
Document that pragmata imports traditionaly begin with a - and can be implemented using \&figure_it_out.
Resolve the conflict I just created with exporting arrays and code via the reference syntax and the tag and \&figure_it_out syntax. (I really think that you should be able to export via hardrefs rather then symbolic refs, though.)
$EXPORT_DEFAULT_VERSION should be doable in the hash too, rather then as a seperate global. (Perhaps _Exporter_VA_defaultVersion.) Also, if it's not given, it should default to $VERSION, not have no default.
Warning: Unless otherwise stated, code is untested. Do not use without understanding. Code is posted in the hopes it is useful, but without warranty. All copyrights are relinquished into the public domain unless otherwise stated. I am not an angel. I am capable of error, and err on a fairly regular basis. If I made a mistake, please let me know (such as by replying to this node).