Чтобы отдать код 404 из кастомного макроса, используйте команды:
$template = 'default';
$buffer = outputBuffer::current();
$buffer->status('404 Not Found');
def_module::setHeader('%content_error_404_header%');
list($tpl_block) = def_module::loadTemplates("content/not_found/".$template, 'block');
$template = $tpl_block ? $tpl_block : '%content_usesitemap%';
return def_module::parseTemplate($template, array());
Взято из content::get404
Странно, что если напрямую вызвать cmsController->getInstance()->getModule('content')->get404(); то код ответа будет 200.