Почему return не возвращает значение?
Потому что значение функции test не возвращается при рекурсивном вызове. Должно быть так
<?php
function test($a) 
{
    if($a === 5) {
        return 'не возвращает значение';
    }
    
   return test($a + 1);    // Здесь нужен return 
}

echo test(1);
sandbox.onlinephpfunctions.com/code/3473fa114823e1...
echo — Выводит одну или более строк
https://www.php.net/manual/ru/function.echo.php

return возвращает управление программой модулю, из которого была вызвана функция. Выполнение программы продолжается с инструкции, следующей за местом вызова. 
https://www.php.net/manual/ru/function.return.php

Улавливаешь разницу?