So ltdl does not help for that matter? One way would be to pass to the component a structure with all the useful function pointers (using #define to keep the same source code).
Another way would be to gather the allowed functions into a separate libhwloc-components library without internal state, thus allowing several copies, but that would bring a possibility of differing versions between e.g. a statically-linked libhwloc.a and the dynamically-loaded libhwloc-components.so. Samuel