If all you want is to take some kind of search function or backtracking system that generates a stream of results then combining the sub branches is trivial. If you represent a stream as a list and use something like Haskell that is lazy, then all you have to do is literally combine the streams.
myStreamGenerator1 p1 ++ myStreamGenerator2 p2
if you want a different search strategy you can intersperse.
concat . intersperse (mySG1 p1) (mySG2 p2)
the cases being DFS and BFS