Как правильно реализовать архитектуру AJAX приложения?
А вы знатный велосипедист.- не знаю как правильно обрабатывать и контролировать состояние AJAX запросов (на одной странице их может быть несколько) - как я теперь понимаю, нужно использовать PROMISE (но пока не понял, как это работает - достаточно сложно воспринять)
axios- много данных храню на стороне клиента в глобальных переменных. С одной стороны, сейчас это делает отклик быстрее, но с другой я не хочу сломать браузер, когда данных станет больше, кроме того, сейчас думаю, что правильнее было бы иметь на клиенте только те данные, которые нужны только здесь и сейчас.  
react stateful components- фактически view совмещен с контроллером, из-за этого уже сейчас сложно работать с файлами контроллеров - они разрастаются и содержат много html - кода. Кроме того, они завязаны на глобальные данные, про которые я уже писал и получается, что ни о каком модульном подходе не приходится говорить. Как от этого избавиться при текущей архитектуре не знаю. 
react-redux, react decomposition- практически все данные и весь код приложения доступен и открыт через консоль браузера (можете сами посмотреть). В том числе видна вся структура приложения - можете сами посмотреть. Можно ли что-то с этим сделать я не знаю. 
webpack, etc...- не знаю, как реализовать какую-то единообразную схему обработки ошибок в приложении, без дублирования кода. Чтобы все скрипты вдруг не валились, если где-то что-то сломалось. То же самое и про единнообразную обработку AJAX запросов (знать когда все запросы исполнились и т.п.)
react error boundaries- проблема с навигацией и индексацией из-за AJAX (сейчас вроде как уже понял, что нужно использовать pushState)
react-router, ssr- что делать и нужно ли что-то делать для тех, кто не использует JS. Например те же рекомендации по SEO для AJAX говорят что для всех динамических страниц нужно иметь статический snapshot. Как его реализовать - чтобы это было "дешево (просто) и сердито (не криво)" я не знаю. 
ssrВ целом мое желание сейчас - понять, как переделать приложение так, чтобы его потом можно было без боли поддерживать, расширять и чтобы оно работало стабильно и единнообразно. 
Таким образом проще переписать приложение с использованием какого нибудь современного стэка (react например)
Простите меня заранее, но я вижу, что Вы хотите много чего, не изучив даже малой доли того, что требуется для построения грамотной архитектуры.
Я не могу Вам что-то посоветовать, поскольку я не знаю архитектуры существующего у Вас приложения.
Могу сказать, как использую сам: есть собственная либа includeHTML простая, как ведро... Но я даже не думал, что кому-то она будет нужна. Сейчас решил сделать роутинг для неё и контроль загруженных ресурсов (чтобы не грузить по несколько раз одно и то же).
Посмотрите принцип работы библиотеки: автор - я и отвечу на все вопросы, есть предложения по улучшению - также, пишите.