your heat anticipator could be set wrong.
a mechanical thermostat has a variable resistor that heats up during the heat cycle. it is called a 'heat anticipator'. as its name suggests, it anticipates the fact that the blower will continue to blow out warm air after the heat signal goes away, so the resistor generates a false heat at the thermostat sensor location to cause it to cycle off early. this induces a regulation to prevent overshooting. if it generates too much heat, it could cause the thermostat to cycle off fairly quickly. it is a variable resistor and can be adjusted. you will need to know the amp draw of the heat signal circuit (the wire connected to 'w' - it can be measured at the furnace location with a ac amp meter). the resistor is visible on the face of the thermostat (behind the cover). it must be adjusted to the amp draw of the 'w' circuit.
modern digital thermostats do not have this adjustment.