Собственные исключения необходимы в случаях, когда вы хотите обрабатывать (или, в случае если вы автор библиотеки - предоставить возможности обработки) какой-либо исключительный сценарий специальным образом. К примеру посмотрите,
как организована работа с exceptions в Doctrine.
Также собственные исключения могут пригодится в случае, если вы хотите передавать с этим исключением какую-то дополнительную информацию. К примеру посмотрите на exceptions для ответов
разных HTTP статусов в Symfony.