Относитесь к этому как к оператору return, который останавливает работу программы и возвращает ответ в фронтенд.
Распространенная практика создать обработчик, который нужен чтобы проводить проверки внутри методов программы. В контроллере создаётся блок try catch, и любое исключение в бизнес логике, которое встречается в стеке вызовов методов этого контроллера, остановит программу и вернёт нужный ответ в фронтенд.
Например, при ajax запросах, исключения очерчивают границы бизнес логики. Так, если сумма равна нулю, то выбросить исключение с текстом, что сумма должна быть больше нуля и т.д.
То есть, исключения выбрасываются не только для ошибок компиляции, паркинга, синтаксиса, но и для ошибок бизнес логики.