Oh boy this some crazy stuff, but I think I figured it out. I read about the base Event class for bokeh.events and saw that you can kinda initialize a particular event type via json/dictionary. Then I noticed that on the JS side you can call .trigger_event on a figure object. With that in hand I messed around with what the “dictionary” input should be, and here it is.
Idea of this example is to trigger a tap event on a figure at a given location by clicking a button.
from bokeh.plotting import figure, show, save
from bokeh.events import Tap
from bokeh.models import CustomJS, Button
from bokeh.layouts import column
fig = figure(x_range=[0,30],y_range=[0,30])
r = fig.line(x=[0,20],y=[0,30])
#seems like 'event_name' and "tap" are recognized, the key-values are arbitrary?
d = {"event_name": "tap", 'x':10,'y':20}
#this callback to happen when the figure "feels" a tap event
cb_tap = CustomJS(args=dict(src= r.data_source)
,code='''
console.log('TAP HAPPENING')
console.log(cb_obj)
console.log(cb_obj.x)
console.log(cb_obj.y)
src.data['x'] = [0,cb_obj.x]
src.data['y'] = [0,cb_obj.y]
src.change.emit()
''')
fig.js_on_event(Tap,cb_tap)
#this callback to be triggered when you click the button, and all it will do is try to trigger a tap event
cb_simtap = CustomJS(args=dict(fig=fig,d=d)
,code='''
fig.trigger_event(d)
''')
btn = Button(label='simtap')
btn.js_on_click(cb_simtap)
save(column([fig,btn]),'dummy.html')

As always any elaboration on the mechanics of how this works much appreciated.