Возможно, как простое решение, будет полезен этакий FactoryRef, статический объект, который бы помогал юзеру устанавливать одну или более скрытую реализацию заданного базового типа (хуки, фабрики, процедурные переменные, в общем, все подряд) и корректно следить за их состоянием, помогать с миграцией от одной реализации к другой в рантайме и т.д.