Good point. I don't think the puzzles do this and if they would, I would run a pre-solve pass over the puzzle first to flood fill such horseless pockets up with water, no?
Like the other comment suggested, running a loop where you keep adding constraints that eliminate invalid solutions will probably work for any puzzle that a human would want to solve.
Score: 7
~~~~~~
~····~
~·~~·~
.#..#.
......
..#...
.#H#..
..#...
However, I think that you do not need 'time' based variables in the form of reachable(x,y,t) = reachable(nx,ny,t-1)
Enforcing connectivity through single-commodity flows is IMO better to enforce flood fill (also introduces additional variables but is typically easier to solve with CP heuristics): Score: 2
~~~~~~
~....~
~.~~.~
......
......
..##..
.#H·#.
..##..
Cool puzzle!