The real problem isn't that the subroutine reference is taken before it exists, as this actually works due to the magic of Perl:
package A;
sub import { *b = $_[1] };
BEGIN { $INC{"A.pm"} = undef } # Stop 'use' from loading A.pm
package main;
use A \&c;
print A::b(), "\n"; # prints "YO\n"
sub c { "YO" }
I suspect your problem is that Alzabo::MethodMaker is trying to execute name_maker() before it is defined (otherwise, you wouldn't have this question, as the above code should 'work'). The only way around this is to define name_maker() first, or to delay execution of Alzabo::MethodMaker::import using one of the means suggested by other people.