Почему рекомендуют использовать Vuex как прослойку для работы с API (через axios)?
Vuex  используется  как хранилище.  Компоненты как его потребители. 
Это позволяет разделить приложение на слои и не смешивать логику и отображение и упрощает тестирование.
И типичный пример. 
У вас есть 3 компонента на 1 уровне посты, паджинатор и фильтр

причем паджинатор и фильтр дублируются. То есть вместо простого отображения вам нужна и логика и оповещения контрола высшего уровня. Кошмар!
Не знаю, зачем так делают, но предположу, чтобы иметь относительно одинаковый вариант получения данных, независимо от компонентов. Если с сервера запрашиваются данные об авторизированном пользователе или еще что-то, что не подразумевает изменения в зависимости от параметров запроса, то наверное логично делать это через экшны стора. Но вот списки, которые подразумевают фильтрацию и пагинацию вообще только проблемы создают. Например, компонент берет список из стора и отображает его. Потом мне понадобилось в попапе те же сущности вывести, но с другой фильтрацией - все - список первого компонента затерся вторым. Так что с такой практикой надо очень аккуратно.
У нас на работе изначально пошли по пути данных в сторе, потом это выпилили.
Еще минус в том, что данные с сервера в сторе реактивные, хотя для данных, полученных с сервера это обычно не требуется и влияет негативно на производительность. В случае использования composition api такие данные лучше хранить в shallowRef сущности и обновлять ее целиком при получении новых.