В ходе расширения имеющегося функционала иногда нужно изменить запрос.
Например CIblockElement::GetList - добавить к нему свои таблицы. В данный момент есть вариант лишь выноса (модифиация не рассматривается) данной функции в новый класс, который будет расширять имеющийся (extends) CIblockElement. Но тут необходимо создавать кастомные компоненты и везде заменять CIblockElement:GetList на (например) CCustomIblockLement::GetList.
Это все опять же внесет свои коррективы при установке модуля, такие как копирование шаблонов компонентов в кастомизированные и др., что для пользователя сложно.