Создаёт обьект и передаёт его или только определяет и конфигурирует, а создаёт фабрика
Именно так. Мы когда регистрируем сервис в сервис локаторе, у нас появляются фабрики сервисов. Они могут быть явными (то есть мы явно пишем код который занимается созданием объектов, например так сделано в pimple) или не явно (всякие автоконфигураторы на основе рефлексий как в PHP-DI или конфиги в Symfony). Так или иначе у нас будут появляться фабрики.
Сервис локатор по запросу сервиса проверяет создавал ли он такой или нет. И если нет - просит фабрику сделать сервис и выплевывает его тому кто запросил.