Будет ли хорошей практикой такая структура приложения на Vue?
Добрый день.
Не совсем понятно, что в данном контексте вы подразумеваете под контроллерами и бизнес-логикой. 
Сам по себе vue не общается с сервером и кейс его использования связан исключительно с отображением. О чем, собственно, и написано в их официальном гайде:The core library is focused on the view layer only
Одна из концепций, которую можно назвать бизнес-логикой в отношении vue (и любого другого спа) - это, наверное, стейт приложения. Вы не можете отделить стейт от вью, потому что на нем базируется реактивное отображение данных, без чего, собственно, у вас будет не спа, а прокачанный шаблонизатор, работающий на фронте. Даже представить себе реализацию такого не могу. 
Если ваша идея состоит лишь в том, чтобы вынести забор данных из стейта приложения в отдельный модуль, с которым вью будет взаимодействовать - ну это ваше архитектурное решение, наверное. 
Как по мне, лучшее решение - это использовать дополнительный плагин для вью - стор (vuex). В этом модуле вы сможете хранить запросы к серверу, логику обработки данных и проч. приблуды, связанные с бизнес-логикой, не изобретая велосипед.
Для ядра это слишком много логики. Нужно разделить задачи, которые выполняет приложение, на части. Например, в одном приложении вы работаете с данными в базе, в другом приложении работаете с отчётами.
Как говорят у нас на флоте - Keep it simple.