New Long term contracts are offered if the Market value of said player rises due to performance or the players current contract is close to expiring as the club does not want that player to move on for no fee. This works only if the player honours the contract. But when a player goes on strike or says his head is not right and is not fit to play makes said contracts a joke.
Yes, I know why clubs offer the contract - they want to increase/maintain the value of their asset. My point is that they do not have to make such an offer. They are fully aware of the risks of doing so (for instance, that a player may get injured, refuse to play, whatever). They choose to offer a long-term contract in full knowledge of the risk of doing so, so hold at least a significant part of the blame.
Also, and as you point out, by holding a player on a long-term contract, the club has artificially increased the player's value. If a player with a 5 year contract is sold, he is likely to go for more money than the same player on a 1 year contract. The club is almost invariably compensated for their loss of the extra years of service.