The most simple solution I found for now is to place forward
declarations of hemisphere and your intersects() overloads before
// the rest as it is in the file hemisphere.hpp
Note that hemisphere doesn't have to be defined in the bg::model
namespace and that traits are not needed.
P.S. you have a bug here:
You're passing a point to a 2-argument set() function which is
used for segments and boxes. Either remove the first argument or
pass segment instead of a point.