Assuming that the selection state of a listbox reflects the physical state of a system, then <<ListboxSelect>> should fire whenever the selection state of the listbox changes. This happens for mouse clicks in the listbox, but not when the listbox loses the selection. Consider the following script. If one or more entries in the listbox are selected, then clicking "take" removes the selection (the entries are no longer highlighted). However, the bound "puts" doesn't fire to indicate this change in state.
listbox .l
.l insert 0 1 2 3
pack .l
button .b -text "take" -command {selection own .b}
pack .b
bind .l <<ListboxSelect>> {puts [selection get]}