Ciao Saretta,
non sono sicuro di aver capito esattamente cosa vuoi ottenere comunque:
se vuoi che sia espandibile solo UNA voce in base al valore di $macro_utente, potresti modificare il PHP così:
echo("[*]<h3 id='".$riga[1]."'>".$riga[1]."</h3><ul>");
(assegni un id univoco ad ogni voce, questo implica che $_SESSION['macro'] sia uguale ad uno, e solo uno, dei valori di $riga[1])

La funzione BuildList dovrebbe essere:
function BuildList(){
document.getElementById("<?php echo($_SESSION['macro']); ?>").onclick=function(){
if(this.parentNode.className!="show"){
this.parentNode.className="show";
if(prev && prev!=this.parentNode) prev.className="hide";
prev=this.parentNode;
}
else this.parentNode.className="hide";
}
}