В принципе Вы правы, сервер будет отдавать json-данные, в качестве исключения могут быть html-формы. На клиенте вам нужно будет отслеживать клики по ссылкам и тригерить бэкбоновские роуты, например:
$('a:not([data-default])').on('click', function(e) {
e.preventDefault();
// код упрощен для понимания, необходимо проверить, не находимся ли мы на текущем роуте
// или существует ли вообще такой роут
router.navigate(link.pathname);
});
В роутере вы сможете создать модель и запросить данные с сервера, затем отрисовать вашу страницу. Рекомендую обратить внимание на библиотеку
marionettejs.com/. Она добавляет пользные компоненты, например Marionette.Behavior, CompositeView, регионы, биндинг UI элементов, что поможет, если вам все-таки придётся передавать html.