I've generally used Select2 or Chosen in the past - they work, but, as you've already seen, there are plenty of caveats.
For the problem you've run into, at least, you can allow values not from the list by using something like <xp:listBox disableValidators="true"/>. That has the distinct potential problem of disabling all validation (so you would have to do a manual check if you also want it required), but it has the advantage of allowing users to enter new values.
In both cases, there are problems with <xp:eventHandler/>s - the customized boxes don't fire the normal onchange/etc. events in a way that the event handlers pick up on. You can sort of get around this by using the "inline" versions in the "events" section of the "All Properties" table for the control (not the "Events" tab), but that limits your options as to what the event does.
The original Bootstrap4XPages renderer plugin came with a Select2 control that presumably papered over some of these problems, but, if I recall correctly, it's not included in the ExtLib version. Due to that, these examples have sort of come back into style: http://www.bootstrap4xpages.com/bs4xp/demos.nsf/select2.xsp