Building subs and pushing them onto @EXPORT or @EXPORT_OK isn't uncommon; I use this same technique in Text::MicroMason.
However, looking at your code, I think you'll need to move the &build_funcs; call to the end of package A, so that it's executed before the use A completes.