So, in summary I think it goes like this....
Assume out on the road, the speedo read 110 and the GPS said 100
Back in the garage, take out the speedo and remove the glass from the front.
Connect a spare speedo cable to the speedo and the other end to an electric motor with a variable speed controller (frequency controlled motorspindle)
Run the motor until the speedo reads 110, then push the needle back to 100
Reassemble and reinstall etc etc
All good so far but as you say George I suspect that you now have a very accurate speedo for 100kph. As I understand it, speedo error is normally recognised as a %, ie originally the speedo was reading (say) 10% high and this was probably across all speeds. Because its a mechanical device, with gears and magnets, even though the needle has been reset for 100kph, it is still 10% innacurate - so by moving the needle, at low speeds, where it used to read 33 instead of 30, now it will read 23 instead of 30 (approx).
I suggest that the GPS/speedo check needs to be done at 10kph/mph increments up to 100/60. From this calculate what the % error is - ie if it is reading slow or high. The variation, whatever it is will probably be consistant. PLUS next time you do a reasonable length drive, say 50kph, check the trip meter for accuracy - you can use the GPS to help with this too. These two bits of info are useful.
If both the speedo and trip meter are reading the same % variation, then start thinking tyre/wheel size, if the trip is accurate and the speedo is out, take it to a instrumnet repairer and they can fiddle with the magnets etc to adjust the speedo variation.
cheers