Как синхронизировать store и back-end?
Насколько хороши варианты: 
1. интервалом синхронить стейт корзины.
2. Синхронить стейт при событии onunload
3. Писать обработчик кликов, который будет регулировать частоту запросов (очень не хочется)
У всех этих вариантов есть общий недостаток. Предположим, кот пользователя внезапно решил поиграть с кабелем питания компьютера и выдернул его. Ну, как-то так получилось. Или пользователь телефон выронил, при падении слетела крышка, аккумулятор вывалился. Или ещё что-то в том же духе. Короче, отрубилось всё. А перед этим пользователь как раз добавил товар в корзину / изменил количество / удалил товар из корзины. И никакой синхронизации.

Надо как-то сразу сохранять состояние корзины, после любого действия пользователя, немедленно. Пишите его в localstorage. Под это дело есть плагины для vuex - например. При загрузке приложения синхронизируйте.

Как синхронизировать в процессе работы - я бы предпочёл третий вариант. Только конечно не клики надо обрабатывать, а состояние корзины в хранилище. Делаете watch, в обработчике - запрос на синхронизацию с сервером, обёрнутый в debounce (лень писать - можете легко нагуглить готовый вариант).

Т.е., будет что-то вроде

methods: {
  syncCart: debounce(function() {
    ...
  }),
},
watch: {
  '$store.state.cart': {
    immediate: true,
    deep: true,
    handler: 'syncCart',
  },
},
Цели правильно понимаю?Ограничить частоту обращений к backend - не более N в M секундНе потерять набранную корзину
Первый пункт решается учетом времени последних N обращений. 
Второй - флагом "всё сохранено на бэкенде" – который ставится при изменении корзины и снимается после успешной синхронизации. При поднятом флаге не давайть так просто уходить со страницы через onBeforeUnload