Походу без костылей никак, есть всякие function_override, но это надо доустанавливать экстеншены.
Как вариант можно find/replace найти вызовы header функций в легси коде и поменять на вызов своей функции. Это не такой сложный рефакторить, если конечно не - "не не не в легаси не полезим совсем"
Начинал я когда то такой рефактор.
Там короче header() вызывается из любых недр. Решил заменить такие вызовы на вызов сервиса, который бы хранил хедеры. А потом перед отдачей респонса в сабскрайбере ложил бы их в Response.
Но обламался, когда увидел кучу мест, где вместо отдачи респоса echo + exit;
На том и закончилось)