Я не знаю, каковы были мотивы разработчиков функций preg. Единственная причина, по которой я могу придумать, заключается в том, что они слишком старались делать вещи по-Perl.
В то время как разделители позволяют указывать флаги вместе с регулярным выражением в качестве одного параметра, указание флагов в качестве отдельного параметра намного чище. Вот как это делает любая другая библиотека регулярных выражений (для языков, которые не поддерживают литеральные регулярные выражения в качестве языковой функции), включая библиотеку PCRE, на которой основаны PHP-функции preg. Код preg действительно должен пройти через задачу удаления разделителей регулярных выражений из строки с помощью регулярного выражения, прежде чем он будет передан в PCRE.