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.