I.e. right now it's not very easy to call a script and get something back out of it without digging through the codebase heavilly.
It should be as easy as:
script.call::<Callback>(vec![])
the sync vs async approaches have benefits and drawbacks, doing this async via messages, you could call any script from any system without exclusive world access