Ну, раз гуру говорят, что best practices нет, посоветую свою just practice.
Вообще не класть в app ничего сверх того, что там держит фреймворк.
Создать свою папку для своих модулей, внутри них создать свои классы (можно повторить иерархию app).
Вопроса, куда девать то, что в эту иерархию не вписывается, уже не возникает - создаешь папку с названием tools, например, и сваливаешь эти тулзы туда ;)
Такой вариант навеян подходом OctoberCMS, где весь РНР-код разработчика ложится в папку plugins/{developer}/{module}, в принципе не смешиваясь с остальной системой.
Как следствие, в следующий проект этот код переносится куда легче.