На удивление сработала простая идея - перезапускать скрипт через самого себя в рамках определенного промежутка времени, меньшего чем установлено ограничение на сервере. Например:
// test.php
<?php
// max_execution_time на сервере равна 300 секунд (5 минут),
// поэтому устанавливаем меньше - 240 секунд (4 минуты)
sleep(240);
// оставляем временнУю метку в файле или в БД
// проверяем - прошел ли час, затем обновляем её
// перезапускаем сами себя
$url = 'https://site.ru/test.php';
$headers = []; // создаем заголовки
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
?>
Вот и весь скрипт. Однократно запустил в браузере (не ждал, а закрыл вкладку сразу же). Дальше он сам перезапускает себя раз в 4 минуты и каждый раз проверяет - не прошёл ли час. Тест на полтора часа показал, что работает :) Сообщу если потом вдруг что отвалится...
UPDATE: рано радовался. Проработал скрипт с перезапусками часа 2 и потом просто взял и перестал перезапускаться. Видимо какая-то неведомая шестерёнка в веб-сервере бдит и закрывает это дело...