Потому что есть принципы)). Миддлвар в ларке это промежуточный обработчик входящих запросов. Его задача работать с запросом: обрабатывать запрос, добавлять заголовки, работать с данными, возможно логировать сам запрос или вносить какие-то Настройки в приложение по которым уже следующие слои будут настраивать сами себя.
Реализация хендлера обработки ошибок или Настройки этого, это задача слоя приложения, но никак не промежуточного обработчика запроса. Тем самым когда мы пихаем регистрацию эксепшена в миддлвар мы как бы немного нарушаем принцип ответсвенности, так как миддлвар реализует не только обработку запроса но и регистрацию исключения. Это не запрещено, скорее является выходом из ситуации в которую сами себя вогнали.
Если говорить об исключениях в API как я говорил выше проще зарегистрировать свой собственный обработчик конкретно для API и его исключений. При работе с FormRequest объектами, достаточно создать один родительский объект или трейт в котором реализовать метод failedValidation и который уже будет возвращать для API конкретное исключение валидации с описанным представлением именно под API.
Но! Разработка это скорее исскуство, так что как сказал Сергей «не лучшее» != «плохо». Ситуации в разработке бывают разные.