I have a listbox where the items contain checkboxes:
In your use case it would be way simpler to use a ItemsControl instead of a list box. A ItemsControl is similar to a Listbox except that it doesn't contain the automatic selection behaviour. Which means that using it to host a list of what are essentially checkboxes is very simple and you don't have to workaround the ListBox's selection behaviour.
Simply switching to ItemsControl will give you exactly what you need:
You can click on text to check checkboxes (default behavior) and you can use the keyboard too without having to wire up any event handlers.