Speedometers are never accurate. They tend to show the speed of one wheel by counting ABS teeth. For this speed to be replicated across all wheels requires an absolutely flat driving surface and travel in an absolutely straight line with identical tyre diameters. Normally, all the wheels on a vehicle move at slightly different speeds - otherwise there would have been no need to invent the differential axle. EU law, translated into UK legislation is clear that a speedometer may never under-read the road speed. Manufacturers therefore deliberately set speedos to over-read. This allows for tyre wear (which reduces the wheel diameter) and allows salesmen and owners to brag about the speeds their car can do.
A GPS sat-nav may well be more accurate, but cannot be absolutely accurate, This is due to 2 things. Firstly, there is usually no allowance for altitude changes in sat-nav speed calculations. Simple Pythagoras' Theorem proves that a vehicle ascending or descending a slope travels further between two points in a given time. Secondly, sat-navs provide an average speed over preset time intervals rather than a simple straightforward speed measurement. If you don't believe this, brake sharply to a halt and your sat-nav will take a noticeable time to reach zero mph.