Они должны вызываться для всех существующих init.php: общего и сайто-зависимых.
Зачем это необходимо добавление кода в init.php может преследовать две цели:
1. Добиться подключения кода на каждом хите т.е. расширение его области видимости. С последующим вызовом из произвольного места на сайте. Т.е. подключение кода и его вызов разнесены во времени исполнения страницы.
2. Добиться подключения кода и его работы непосредственно сразу после подключения.
В обоих случаях код добавляют руками. Если необходимо раздавать код, который работает по принципу 2 (подключили и тут же запустили) через маркетплейс, то это становится трудоёмкой задачей. Нужно писать инструкцию.
Пример такого кода - класс для логирования. Он обслуживает код, который уже исполняется в init.php, а обработчики событий ещё не начали работу. Посмотрите на порядок выполнения страницы.
В маркетплейсе появились решения которые уже дописывают свой код в хвост init.php я считаю, что обработчики решат эту проблему.
Добавлять строчку в шапку init.php с вызовом CModule::IncludeModule('MyModule'); Руками разработчика или скриптом считаю не очень хорошей идеей.
Сошлись на том, что проще пользоваться обработчиком.
Максим, OnPageStart вызывается на 232 строчке main/include.php, а init.php подрубается на 174. Если ты посмотришь промежуточные строчки, то увидишь, что там ничего нужного тебе и нет. Вот только сессия там стартует уже.