Any widget can override onMouseDown / onKeyDown. Call the event dispatcher there. Pretty much any native widgets can be interacted with / have focus. No buttons needed, indeed. Buttons often get in the way, actually.
Every time you do something to a widget, a piece (however many registered) of code gets a notification.
Other than that, I don’t understand what kind of callback you’re after.
but I cannot bind to on clicked since the component is complex, it’s not just a button
I hope you understand my confusion