Quello è il normale funzionamento dei listbox, anche di windows. Puoi provare questo codice, a tuo rischio (e modifiche).. :)

codice:
var listener = new Object();
listener.selecting = false;
listener.change = function(evt)
{
	var index = evt.target.selectedIndex;
	if(!this.selecting){
		this.ini = index;
	} else {
		var select = [];
		if(index < this.ini){
			for(var i = index; i < this.ini + 1; i++)select.push(i);
		} else {
			for(var i = this.ini; i < index + 1; i++)select.push(i);
		}
		evt.target.selectedIndices = select;
	}
	this.selecting = !this.selecting;
};
lista.addEventListener("change", listener);