I looked through the issue queue and this doesn't seem to have come up before.
It would be good if BEF allowed other modules to define exposed widgets.
This would mean people could implement any obscure widget they desire without it having to bloat this module with things most people would not need.
It could be done just with a hook system or using something like the ctools plugin API, although I think to go the ctools route the best thing to do would be to convert all of BEF's widgets to plugins also, which would be a huge change and would probably be better of in a new branch.
Which leaves a simpler hook system.
I haven't fully fleshed it out yet but off the top of my head it would need to have:
* Something like a hook_bef_widget_info(), where callbacks etc. can be registered.
* In options_form() there should be a hook so modules can add their widget to the bef_format options. This would pass in the filter so the other module could determine whether or not they can work with that filter.
* A way to add additional options to the options_form for their widget.
* Within exposed_form_alter() modules need to be able to have their own case for the bef_format switch statement, so that a hook or a function they defined in hook_bef_widget_info() is called to do the work. That is also where they can add their own js & css etc.
Also, an addition might be to have something along the lines of hook_bef_widget_alter() for modules to modify other widget behaviour.
However that would be most useful if existing BEF widgets were also implemented via the hook system, in which case we are back to a decent amount of rewriting and might consider the ctools plugin route again.
So I guess the best case scenario is that BEF is more of an exposed filter widget API that also implements a bunch of commonly used widgets (the ones already in the module).
A simpler bolt-on hook system could be up and running faster, which would be nice for me, although it would mean more work in the long run if it was later changed to a full on plugin system and add-on widgets had to be rewritten anyway.
Also, it should be possible to add your own custom widget just using hook_form_alter() functions on the options form and the exposed form, however it seems it would be a nicer solution if it were a plugin system.