The issue you're seeing here happens because "~~lib/gambit#.scm" declares that `+' is part of the default namespace. You need to inform the interpreter that `+' should be part of the `foo#' namespace after you include the gambit header. There may be a better way than my example below; I'm a namespace novice myself.
(##namespace ("foo#")) (##include "~~lib/gambit#.scm") (##namespace ("foo#" + blah))
(define + 20) (define blah 20)
(##namespace (""))
(pp `(+ ,+)) (pp `(foo#+ ,foo#+)) (pp `(bleh ,bleh))
Hope this helps,
-Ben