Реализации фабрики нужно скрывать внутри контейнера
Так сейчас так и сделано есть ContainerInterface он знает как получить объект(все больше ему ничего не надо знать он отвечает за объект который предоставляет), есть LocatorInterface он знает о контейнерах, есть имплементации ContainerInterface например Factory, Service которые по своему получают объекты и возможность добавления стратегий тоже есть имплементишь интерфейс ContainerInterface вот тебе и новая стратегия которая работает как надо тебе.
а то что ты говоришь когда один объект отвечает за все приходит в итоге к god object
по поводу реализации фабрики во внуторь контейнера это одна из фитч(то что она снаружи, меньше связанность) которая придает гибкость на этапе конфигурации, можно конечно сделать конфигурацию на базе массивов и уже внутри по ключу container проверять может ли он быть найден(такое будет в json, xml и упрощенной конфигурации) и так далее, но это усложняет код, убирает auto complete кода и существенно ограничивает возможности.
я шаз свободное время трачу на плагин для phpstorm (документации крайне мало) там синтаксис будет простой который позволит описывать return type в зависимости от аргументов и авто комлит доступных значений в аргументы.