it is a complicated process. I had a deeper look into things and as far as I can tell you at the moment, it is like this:
First, the waytype for a given road is retrieved and a speed according to the list youve seen is estimated. Afterwards, if there is a maxspeed:none tag (So the tags concerning legal regulations) on the road, the speed is set to 140 kmh. If there are other maxspeed tags provided, the speed is chosen according to this:
// on some German autobahns and a very few other places
if (str.endsWith(":rural") || str.endsWith(":trunk"))
if (str.equals("walk") || str.endsWith(":living_street"))
After this consideration, the speed is multiplied with 0.9, because we dont assume youre always going at full max speed. There is also some consideration going into it concerning acceleration.
As far as I can tell, the speed is set to the values from the list if there is no maximum speed provided by tags.
Further, we apply a penalty for bad surfaces, which is probably seldom the case in Germany.
So the reason why you see a higher average speed is because the actual used speed is modulated by the maxspeed tag.