эксепшены сделаны для исключительных ситуаций. Если мы ситуацию можем обработать и не успасть — она не является исключительной. Иначе эксепшен превращается в goto-программирование
Ну удачи тебе тогда прокидывать куда-нибудь в userService.findUserBySlug объект Response и самостоятельно устанавливать в него статус 404, если пользователь не найден, вместо того, чтобы просто кинуть UserNotFoundException и дать Несту сделать свою работу :) Правда в том, что современные фреймворки (Nest, Spring) позволяют использовать исключения не только для исключительных ситуациий, но и как элемент бизнес-логики, и лично я считаю, что этим можно и нужно пользоваться.
А порой кидание исключения и вовсе является единственным способом достигнуть желаемого результата. В том же Spring'е методы, которые вызываются в @PreAuthorize, тоже должны возвращать true или false, и в случае false Spring просто вернёт стандартный ответ с 403 статусом. И единственный способ изменить это поведение - кинуть своё кастомное исключение внутри метода, который вызывается в @PreAuthorize))