1. Для реактивного подхода да важно.
У вас нет зависимого состояния в случае отдельного сбоя в отдельном узле, можете легко восстановить работу узла, без особых заморочек, это часть подхода.
2. Для производительности на отдельный запрос - асинхронные вызовы всегда хуже. Мы делаем запросы асинхронными не для того чтоб выжать максимум из одного запроса. Асинхронность открывает путь к параллелизации (раз нет зависимости, запросы могут быть выполнены в любом порядке, в том числе и параллельно), такие запросы повышают отзывчивость системы (интерфейса), лучше распределяют нагрузку.
3. Работа с коллбэками - всегда было то еще удовольствие, композиция функций конечно более предпочтительна.
----------
для создания реактивной архитектуры традиционно - akka, play, kafka (все это с джавой работает в том числе)