Бывает такое, что фреймворк бросают, например angularjs. если у вас логика отделена от контроллеров, то перейти на другой будет легче.
Также, логику, вынесенную в хендлеры, которые не зависят от реквеста, можно запускать и в CLI command, и в queue worker.
Еще в тестах это удобнее. Логику, отделенную от фреймворка можно протестировать сотней тест кейсов, которые выполнятся за 200мс. Если логика находится в контроллере, то 1 тест кейс может выполняться несколько секунд, каждый раз поднимая ядро фреймворка. Тестировать логику, а не фреймворк. Хотя логику + фреймворк тестировать тоже надо, но это функциональные тесты, они проверяют только критический путь.