На что только люди не идут, что бы не использовать фреймворки. Но это вопрос философский.
Для того, что бы полностью не затереть $app->data, сделай на них метод/сеттер. И будет по типу $app->set('variable','value') или просто $app->var = value;
Мало того, можно определенные выборки пораскидывать в трейты, и использовать в необходимых контроллерах.
Так же еще можно и через гетеры определять необходимость подгрузки данных. К примеру тебе надо только на части страниц показать какие-то данные А. Прописываешь по типу...
if (!isset($this->data['A']){
$this->data['A'] = Foo::bar();
}
return $this->data['A'];