Could be using loads of signals, my antique Garmin GPS12 uses up to ..... er 12

, also the GPS unit does work out height, although this is the least accurate function. So knowing speed between A + B in plan view, plus increase in height it can generate an accurate speed.
Saying all that, unless the hill is VERY steep for a long time the effect of going up a hill is marginal on speed readings.
i.e imagine a 1 in 10 hill (10%) a kilometre long, as against a flat piece of road a kilometre long.
car covers each distance in 1 minute
Flat distance = 1 km => speed = 60km/h
Hill distance using pythagorus (
sp x10 see me
)
height of hill = 100m length = 1000
=> (100 x 100) + (1000 X 1000) = square root distance travelled
=> 10000 + 1000000 = square root distance travelled
=>1010000 = square root distance travelled
=> distance travelled = 1004.987m
call it 1005 metres = 60.3km/h
or 1.005 km as you can see practically no differance in distance travelled, and well within the error tolerances of speedometers, so you would never notice the differance even if the GPS was just telling the speed over "flat" ground, and not allowing for hills.
-----
repeated for a 1 in 4 hill (25%) -- seriously landrover steep
gives figures of
flat distance 1000m = 60mk/h
hill distance 1030.776m still only a 3% differance = 61.84mk/h
not noticable
-----
repeated for a 1 in 1 hill (45degree angle suicidal nutters on scramblers only)
flat = 1000m
hill = 1414.21m you'd probably notice that differance, but that would be the least of your problems