Как правильно разделять приложение node js на микросервисы?
Ну вообще обычно есть "точка входа" которая имеет публичный Api и занята она проксирование запросов к микросервисам. 
По поводу протокола. 
Я юзаю Go и думаю что тоже подойдёт к любому ЯП. 
У меня между микросервисами сделано подобие json RPC по верх TCP и UNIX SOCKET. Второе сделано на случей если микросервисы на том же сервере и каждый микросервис слушает как tcp так и unix socket. 
Обычно каждый модуль выносят в микросервис (а-ля Авторизация, Чат, Отправка EMAIL и т.д.)
Свое время тоже задумался вопросом организации проектов. Для нескольких личных, и пары проектов на заказ начал организовывать структуру на основе модулей высокого уровня. 
По требованиям, что стояли предо мной, мне нужно было создать проекты в которых есть админка SPA (Single page application),  есть API, и есть публичная часть (front, морда)  которая для одного проекта может быть SPA,  для другого чисто монолит с рендерингом вьюшек. 
В итоге получилось такая вот основа - https://github.com/DangelZM/simplicitjs Сейчас нет времени как то дорабатывать. Но мне для старта небольших проектов с админками пригодилось.