Para solucionar esse problema, montei um esquema com div, na qual isso é possível.
Você deve atentar para duas coisas no código:
1 - No select multiple, geralmente usa um name como: valor[] ( em array ) para obter esses valores em um outro documento, já no caso desse script, são usados input checkbox, que terá a mesma função, ou seja, todos eles tem o name valor[].
Obs.: O checkbox fica oculto para o usuário.
2 - Eu trabalhei com ids, cada tr tem um id, onde o input acompanha esse id na linha da tabela, no caso, você deve manter o id como no exemplo, seguindo a ordem numérica.
Qualquer dúvida de como fazer isso no seu caso, poste no fórum.
Abaixo segue o código:
<script>
function troca(id,cid) {
if(document.getElementById(id).checked==false) {
document.getElementById(id).checked=true;
document.getElementById(cid).style.background='#0066cc';
} else {
document.getElementById(id).checked=false;
document.getElementById(cid).style.background='#ffffff';
}
}
</script>
<div border=1 style="overflow:auto; overflow-x:hidden; width:120px; height:65px; border:1px double #cccccc;">
<table cellpading=0 cellspacing=0 width=100%>
<tr id="c1" onclick="troca(1,'c1')">
<td><input type="checkbox" id="1" name="valor[]" value="valor aqui" style="display:none;"></td>
<td style="cursor:default;">valor 1</td>
</tr>
<tr id="c2" onclick="troca(2,'c2')">
<td><input type="checkbox" id="2" name="valor[]" value="valor aqui" style="display:none;"></td>
<td style="cursor:default;">valor 2</td>
</tr>
<tr id="c3" onclick="troca(3,'c3')">
<td><input type="checkbox" id="3" name="valor[]" value="valor aqui" style="display:none;"></td>
<td style="cursor:default;">valor 3</td>
</tr>
<tr id="c4" onclick="troca(4,'c4')">
<td><input type="checkbox" id="4" name="valor[]" value="valor aqui" style="display:none;"></td>
<td style="cursor:default;">valor 4</td>
</tr>
<tr id="c5" onclick="troca(5,'c5')">
<td><input type="checkbox" id="5" name="valor[]" value="valor aqui" style="display:none;"></td>
<td style="cursor:default;">valor 5</td>
</tr>
</table>
</div>