http://php.net/manual/en/functions.user-defined.phpによると、関数名としてアンダースコア(_)を使用できるはずです。
関数名は、PHPの他のラベルと同じ規則に従います。有効な関数名は、文字またはアンダースコアで始まり、その後に任意の数の文字、数字、またはアンダースコアが続きます。正規表現としては、[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \xff]*のように表現されます。
ただし、以下はエラーを発生させずにプログラムを強制終了します。
error_reporting(E_ALL);
echo('start');
function _($x){return ($x)?htmlspecialchars($x):'nbsp;';}
echo('end');
PHPバージョン5.3.18を使用しています。何がわからないの?