It's completely possible, I don't know what you're having a hard time with. Just take a std::function as an argument to SetCollisionCallback and you're good to go.
@ Disch: OK, that makes sense. I think I just hop between too many threads at once and lose track of the conversation. LB means you should minimize the use of exception handling, i.e. don't use it to control regular program flow, and the bool operator overload for the std::function class is how you would do that in this case. There is no use in calling a function and having it throw a bad call failure when you can just test to see if it exists in the first place.
I wonder how that operator works by the way. If it only looks to see if the address not null or if it has some other mechanism to tell it that the variable has been initialized and\or if it is still valid.
@ Cubbi: Thanks! That is interesting to have bookmarked. I just need to find out where to download them from, my Google-Fu is failing me and I can't grep a website from Windows to find where some of these variables are being declared.