Taking a player off at half-time is tantamount to saying "you've been crap" or "I got it wrong". It seems to be the done thing to give a below par player 15 minutes to turn to his performance round or to give the starting XI 15 minutes to adapt to your tactical change.
You've also got factors such as allowing the other team to tire as much as possible before introducing fresh players, but also allowing that fresh player time to play their way into the game.
Then, in a tight game, there's the simple matter of 'who blinks first?'.