The current situation is that when protoc runs it generates all necessary imports and introduces several helpful aliases with statements of the form from customer_package.customer_subpackage import customer_module as customer_package_customer_subpackage_customer_module and then it runs our plugin which acts as though that didn't happen and generates its own imports (based on its own calculation of with what path those modules should be imported) inside our factory functions. We should eliminate all that and in our code refer to the modules in which the messages that we use are defined by the aliases that protoc created for them.
(This is coming out of a work session the other day with @haberman.)