Sie haben keine Ausnahme geworfen, weil sie diese Funktion abwärtskompatibel halten müssen. In älteren PHP-Versionen, PHP < 5, gab es keine Exception.
Der boolesche Rückgabetyp wurde für die Meldung von Funktionsfehlern "reserviert". Sie müssen herausfinden, warum die Funktion fehlschlägt. Ich vermute, der einzige Grund, warum sie fehlschlägt, sind ungültige Argumente.
Vielleicht würde es genügen, sie in einen sicheren Aufruf zu verpacken:
function safe_call_user_func()
{
$nargs = func_num_args();
$args = func_get_args();
if ( $nargs == 0 )
throw new RuntimeException( 'Require at least the callback param' );
if ( !is_callable( $args[0] )
throw new InvalidArgumentException( 'Callback param is invalid' );
return call_user_func_array( array_shift( $args ), $args );
}