If you want to try Python then I could help quite a bit. Boost::Python prefers you to use std::strings so that you can reference strings that are inside python directly while still handling reference counting properly, whereas you cannot ensure reference counting with const char's, so they could disappear at any moment.
Also, fast delegates are nothing but function pointers, they don't support functors, binding etc... If you wanted to bind callbacks into or from a script, then you will need to use a proper function pointer, like boost::Function. Boost::Function compiles to identical ASM code as fast delegate if all it holds is just a function pointer (although, by default, but can be changed, it adds in a check to make sure it is valid before calling, which you should do anyway). There really is no reason at all to use fastdelegate, especailly since Boost::Function compiles to the same assembly for basic function pointers, and it supports vastly more powerful construct, including constructs that make binding callbacks with scripting languages an absolute breeze.
This of it this way, for a script callback to C++ without using script bindings directly, you have to wrap the callback up in a function and pass that to the callback. Problem is, you cannot dynamically create functions in normal C++. Well with Boost::Function you can.
Because of the heavy templating in Boost::Function, if used as a normal function pointer, it is as lightweight as possible, or it can become heavyweight with complicated bindings to auto fill in parameters and all. And since Boost::Function is already accepted into the next C++ standard library, you may as well get used to it.
You probably could even make direct callbacks like that using LuaBind as well since LuaBind is a modified version of Boost::Python, but for Lua. The current direction of Boost::Python is tryng to become more scripting language independent, so it was not hard to do.