I'm almost out of wisdom to add to this thread :D, buuut...
To embed Ruby, your C++ project would need to be built against ruby.h and the ruby-msvc-something library that come with the One-Click Ruby installers. For Ruby 1.8, it should be enough to follow these steps:http://my.opera.com/subjam/blog/embedding-ruby-in-c-programs
You could use rb_eval_string() for everything, first ot load all your Ruby files, then to call "on_player_hits_a_wall" etc... To get values back out of these functions, you need to cast the returned VALUE into something useful, google for functions/macros from ruby.h like NUM2INT or FIX2LONG or STR2CSTR. It works a bit differently with Ruby 1.9.
The other, usually suggested route would be to write the game in Ruby/Gosu, but letting your friend write all the performance critical data structures and algorithms (pathfinding etc.) in C++. Then he can make these available to you by wrapping them with either Rice, SWIG or a ruby-ffi binding.
I have no idea how you'd share Gosu resources with the language that is embedded in either case. My only idea (for the first route) would be to slap the RubyGosu_wrap.cxx file into your C++ project and call Init_gosu after you have initialized your embedded Ruby. That should give it access to the same version of Gosu that is built into the C++ program. Then you will probably have to use some weird, SWIG-generated function to wrap Gosu::Image references into a Ruby VALUE so you can pass it to Ruby functions. If anyone knows how to do this, then it's the SWIG docs ;)
Never done it, never seen it done, but if it works for you then please post how :)