If you have all these constraints:
- must be easy to use extensions languages functions from C, and the other way around
- must therefore be easy to convert values from the extension language to C, and the other way around
- must be possible to share this state in a multi thread program
- including, have several threads implemented in the extension language
- must be able to load code at runtime
Then guile is not only a good choice, it's sadly the only possible choice (or at least that was the case last time I checked few years ago). Many languages that claim to be good at extending C are lacking one of the above (usually the multithreading part; Lua, for instance, allows to start several VM in several threads, but they are isolated).