Sounds like the speedo head is dirty or worn out, or the speedo cable needs lubrication. I assume that you have never messed with either one.
You can have the speedo head cleaned, or you can purchase a new one. Lubing the cable shouldn't set you back much.
How many miles are on the vehicle?
The hole for the trip odometer reset button does let in a fair amount of dust, which can contribute to contaminating the speedo head, making the needle slow.
The speedometer needle in not physically connected to the cable, it is operated magnetically. When the assembly gets dirty, there is more friction present, which causes the needle to respond and read slower.
If you have a speedometer shop in your area, you could have them take a look at it. The dealer is a possibility, but they're usually more expensive on everything.
Another remote possibility is a problem with the output shaft on the transfer case. My output shaft broke a few years ago, shearing off behind the threads. The speedo gear runs off the output shaft, so I started to get erroneous readings, needle swinging back and forth and pegging past 85. The dealer finally found the breakage, which set me back a pretty penny. I'm not saying this is it, your speedo head is probably just dirty or your cable needs to be lubed, I'm just relating something that happened to me that was hard to pin down.
Hope you have a simple fix.
==================
DOGMAN
91 4dr 5sp
5.5" Superlift