Ti chiedo scusa ma non avevo capito che tenevi i caratteri codificati nella stringa con la loro rappresentazione esadecimale preceduta da una sequenza di escape. Pensavo li rappresentassi così per far capire il carattere atteso.

In effetti la soluzione che hai applicato è semplice ed efficace: cerchi la parte numerica dopo \u**** e la utilizzi come elemento della Entity HTML &#x****; (e questo funziona fin tanto che il charset del documento HTML è uguale alla codifica unicode utilizzata per gli escape). C'è un piccolo errore: nella funzione invochi una echo invece di ritornare il valore. In più mi sono permesso di modificare leggermente il pattern in modo da evitare l'utilizzo della funzione str_replace. Mi sono anche preso la libertà di cambiare il nome alla funzione (ma qui sento di essermi allargato troppo) poichè la funzione non decodifica nulla, ma a parità di codifica numerica, passa da un formato che utilizza l'escape a quello delle entità html.

Codice PHP:
<?php
function EscUni2HTMLEntity($str){
    return 
preg_replace("/\\\\\\\u([0-9a-f]{3,4})/i","&#x\\\\1;"$str);
}

$text "Grazie mille per l'aiuto, \n\n\\u00b0.\\u2022\\u00b0\\u2022.\\u2605diventa fan\\u2605.\\u2022\\u00b0\\u2022.\\u00b0 \\u00a9";
echo 
EscUni2HTMLEntity($text);
?>
spero di esser stato utile anche se la soluzione era ormai evidente!