br1 ha ragione...dovrebbe bastare l'uso di optgroup.
In alternativa puoi usare JavaScript assegnando dei value vuoti alle option non selezionabili e quindi controllare questo valore all'onchange tramite una funzione. La funzione può mostrare una finestra di alert per avvertire l'utente che quella selezionata non è un'opzione valida, oppure può impostare automaticamente come selezionata la option successiva a quella "non valida". Un'altra alternativa, ma decisamente più complessa, è creare due menu a tendina in cui il secondo contiene le sottovoci ed è dipendente dalla option selezionata nel primo.

Un es. della funzione che imposta automaticamente come selezionata l'opzione successiva a quella di una voce non selezionabile è il seguente:


codice:
<head>
<script type="text/javascript">
function seleziona(id) {
var selezionato = document.getElementById(id).options.selectedIndex;
if (document.getElementById(id).options[selezionato].value=="") document.getElementById(id).options.selectedIndex = selezionato + 1;
}
</script>
</head>
<body>

............

<select id="nazioni" name="nazioni" size="1" onchange="seleziona(this.id);">
<option value="">-Asia-</option>
<option value="Cina">Cina</option>
<option value="Giappone">Giappone</option>
.......
</select>
Con questo codice, se selezioni "-Asia-", viene impostata automaticamente come selezionata "Cina". Sicuramente non è proprio il massimo...sarebbe a mio avviso migliore la soluzione con due menu a tendina dipendenti, ma per farli devi usare AJAX (non sono molto pratico di AJAX anche se è a tutti gli effetti JavaScript) o un linguaggio server side come PHP, ASP o JSP. Sicuramente, l'uso di optgroup è consigliato