Зачем во Vue запросы выносят в services?
Для упрощения кода. Скажем, чтобы не писать каждый раз всю конструкцию аля axios.get(ENDPOINT + '/api/' + API_METHOD, {
  params: {
    id
  }
})
.catch
...
Делается обёртка, условная функция getUser(id). В неё выносится вся логика по работе с запросом, определение маршрутов АПИ, обработка ошибки и так далее. Наружу торчит только одна функция и параметр.
При работе с TS это проще типизировать. Намного легче описать типы принимаемых параметров и возвращаемый тип для нескольких функций, чем описывать универсальную конструкцию для доступа к любым методам апи.
Ну и наконец: сервис можно вызывать прямо в компонентах. Вызывать методы АПи не обязательно внутри Vuex. Доже чаще это должно выполняться внутри отдельных компонентов, каждый из которых работает с одним-двумя апи, а не со всем набором. 

Я не работал с Vue.js, но очень похоже на реализацию Redux - разделение состояния приложения, представления приложения и запросов. Что бы напрямую не менять стейт приложения создаются дополнительные прослойки. Actions в данном случае - это не только запрос, но и изменение стейта, а одни и те же запросы в теории могут использоваться в разных экшенах, по этому их и разделяют.