First, the velocity at surface cells in vis files is a reconstructed quantity, not true velocity solved by flow equations. The true velocity or flux is solved on edges (cell faces) between cells. For each surface cell, the cell velocity is back calculated from total normal fluxes from the cell faces. In the code, there is a variable called "min ponded depth for velocity calculation" with a default value 0.01m. If ponded depth > the value of this variable, the cell velocity will show the value calculated from the total normal fluxes, otherwise it will show 0.
Second, normally we use seepage boundary conditions at a surface boundary and zero flux boundary conditions for all subsurface boundaries. So the discharge recorded in observation files may also be from subsurface cells, where the subsurface water is forced to the surface outlet boundary and counted as surface discharge.
Hopefully this helps.
Best,
Bo Gao