Но это не соответствует парадигме фреймворка.
Это нарушает
принципы инверсии зависимостей а не "парадигме фреймворка". По сути такие вот штуки ломают принципы ООП и все best-practice которые навыдумывали всякие java-разработчики (и не только java) за последние 20 лет.
Когда имеет смысл вместо сервисов использовать «обычные» классы?
Сервисы - это и есть "обычные" классы. Просто за создание этих классов отвечает отдельный компонент, он один умеет всех создавать и разруливать зависимости что бы вам не пришлось это делать руками. Другой вопрос что если взять какой PHP-DI то он это делает чуть удобнее (за счет автоконфигурации на основе нэймспейсов).
Далее... то что у вас в один класс инджектятся и логгер, и две каких-то фабрики и EntityManager подводит меня к мысли что что бы вы там не делали, вы не стараетесь даже соблюдать
принцип единой ответственности. Возможно я ошибаюсь и все это реально нужно... Увы деталей вы не предоставили.
Словом... все это не Symfony-specific штуки, это классическое ООП и только. Если вы распишите задачу чуть по подробнее (хотя бы на уровне интерфейсов) уже можно будет подсказать что-то конкретное. Пока я не вижу ничего плохого в куче приватных методов. Главное что бы интерфейс чистым был. Что-то на уровне:
interface EntityProcessor
{
public function process(Entity $entity);
}