Я думаю, что основная причина в том, что сообщения об исключениях .NET локализованы. Фактический текст сообщения должен быть получен из строкового ресурса. Лучше поместить код такого рода в одно место, чтобы никто не возился с именем строкового ресурса.
Идея использования фабрики, чтобы можно было настроить тип исключений, кажется мне менее чем полезной. Это может привести к поломке большого количества клиентского кода, который по какой-либо причине пытается перехватить это исключение. После того, как вы отправите код, который выдает конкретное исключение, вы в значительной степени застряли с ним. Выберите мудро:)