At least in the USA, most major highways have mileposts. Note your odometer reading as you pass a milepost, then see what it is several miles later. If you drive, say, ten miles by milepost, and your odometer says you traveled 10.2 miles, it is 2% high.
Brown12, I'm not sure what the current policy is but as recently as 10 years ago speedometers in the US were intentionally calibrated at the factory to read low. The theory is (was?) that when you're driving down the highway at a posted speed limit most drivers will add 5-10 mph and feel safe from a speeding ticket so by making the speedometer read high by 3-5 mph at highway speeds the drivers are actually driving at the speed limit or just a couple of mph over but think they're speeding. It was intended to make our highways safer. More recently with the mass usage of GPS and now GPS enabled smart phones this may no longer be the case, but I can tell you that my 2000 Acura and my wife's 2005 Mazda both have speedo errors that show on the high side compared to the GPS.
Back in the 80's I used to as a matter of course get my speedo's calibrated for all my cars and street motorcycles. It cost about $20 and took about 15 minutes at the local shop. In my experience, my domestic vehicles had the greatest error stock, then European cars and the Japanese were the closest.
So that we're clear here, most odometers are driven off the speedometers so speedo error translates directly into odometer error.
That being said, changing tire and wheel size and even tread wear differences in stock tires and wheels can also have an effect as well as slight side to side movements.
The speedos reading high tends to be a characteristic of Japanese OEMs. Most American cars have close to zero discrepancy between speedo and actual speed. I don't know much about Ze Germans so I can't comment there.
Also, OEMs take this into account when calibrating odometers... they are usually very accurate with a stock tire even when the speedo reads high.
Speedos on European vehicles must read high by law, to provide a safety margin between the actual speed limit and the driver's perception of his/her current speed.
However the Odometer is expected to be as accurate as possible. Hence you will find that if you calibrate your odometer correctly, your speed will read high, but if you calibrate your speedo against a GPS speed, your odometer will start to read low.
In the old days the speedo and odo were driven off of a gear on the drive line that spun a cable which read on the dashboard display. Is this no longer the case? I imagine now that with the amount of computer equipment onboard that it could be done electronically.
Again in the 1980's switching my speedo was simply a matter of putting the car on a dyno type machine which was calibrated and removing and replacing the gears until the speedo read the same as the dyno. I wasn't aware of any difference in the odometer, but that may have just been ignorance on my part if it was designed to be spot on while the speedo was reading high.
Today it is done almost universally with a speed sensor geared to the transmission output shaft or differential, not the flywheel. Though recently OEMs have begun using wheel speed sensors instead, since those are required for stability control.