Così riesci, però stando alla tua impostazione quello che "passi" è costantemente font quale che sia la OPTION selezionata:
codice:
<script>
function storeCaretSelect(val,frm,elm) {
if (val != null ){
document.forms[frm].elements[elm].value+="["+val+"]"+val+"[/"+val+"]";
}
document.forms[frm].elements[elm].focus();
}
</script>
<form name="$form">
<select onchange="storeCaretSelect('font','$form','$name');">
<option value='Arial'><font face='Arial'>Arial</font></option>
<option value='Arial Black'><font face='Arial Black'>Arial Black</font></option>
<option value='Arial Narrow'><font face='Arial Narrow'>Arial Narrow</font></option>
</select><br>
<br>
<textarea name="$name"></textarea>
</form>
Forse ci avviciniamo di più a quello che vuoi, modificando in questo:
onchange="storeCaretSelect(this.value,'$form','$na me');"
e aggiustando il contenuto delle OPTION 's.