I have almost no experience with gambit, but on other platforms / languages, I usually write an actual callback in C that does feed an „event“ / signal (whatever it is called in scheme) into the VM that is executed on the vm thread / as a lightweight thread. Depending on the requirements of the callback (it might to might not require the buffer to be filled immediately after the callback returns), this might be an option checking out.
Cheers,
Dirk