В хуке App.vue выглядит не очень уместно, хочется вынести эту логику в другое место.
Это какую такую логику? У вас там в created будет простой вызов экшена, это одна строка. Уместно, делайте.
UPD. Вынесено из комментариев:
Почему я не могу блокировать загрузку приложения до выполнения нужного мне действия (запрос на апи, возврат ответа и наполнение стора)?
Можете в своём main.js завернуть создание экземпляра vue в коллбек экшена, который загружает данные:
store.dispatch('получитьДанные').then(() => {
new Vue({
el: '#app',
store,
router,
...
Только пользователь ничего не увидит в процессе загрузки. А если инициировать загрузку данных внутри, можно показывать какой-нибудь прелоадер, пока данные не будут получены:
<div v-if="данные в хранилище есть">
основной контент приложения
</div>
<div v-else>
данные загружаются, надо подождать
</div>