Is there any chess engine that can show if one side has a forced draw? Is there any chess engine that has an analysis mode that can show if a position is a forced draw by either side?

It is common for engines to output evaluations of 0.0 when they detect a draw. But an evaluation of 0.0 can mean many things. For example, assuming it is white to move, an evaluation of 0.0 can mean:


The game is certainly a draw regardless of how either player plays (e.g. insufficient material).
Both players can force a draw. Neither player can hope to win if their opponent plays perfectly.
No matter which move white plays, the computer is 100% sure that black can force a draw if he wishes to. White cannot hope to win if black plays perfectly. A draw is the most likely outcome, but a deeper search might show that black can force a win.
The computer is 100% sure that white can force a draw if he wishes to. Black cannot hope to win if white plays perfectly. A draw is the most likely outcome, but a  deeper search might show that white can force a win.
The computer has not found a forced draw for either side, but the evaluation so far is exactly level. A draw is the most likely outcome, but a deeper search may later show an advantage for one side.


Just to give an example of when this might be useful, if white doesn't need to win and just wants to be as sure as possible of getting a draw then they might prefer to play a move with evaluation +0.0 and a known forced draw even though another move with a higher evaluation is available.

Another example is that if you need a win (i.e. a draw is just as bad as a loss) you might want to play a move with a slight negative evaluation to avoid giving your opponent the opportunity to force a draw. Even though this increases your chance of losing, it also increases your chance of winning.

Obviously there are positions where it is difficult or impossible to be sure whether a forced draw is available or not. But if the engine announces a forced draw then it must be possible to force a draw. False negatives are acceptable but there should be no false positives.

So in summary, I'd like to know for a specific position if one (or both players) have a forced draw available to them. Calculating the numerical evaluation of the position is not necessary, but if it also provides this at the same time, that's a bonus.
The short answer to your question is no, there is not a chess engine that can reliably show if one side has a forced draw.  For example, this locked position is quite clearly a draw to the human eye:



However, notice that the evaluation is 0.17, not 0.00.  Houdini also give 0.05 - ever so slightly good for white.  This is very important.  This suggests that the evaluation of 0.00 is reserved by these programs for a specific reason, and indeed it is.  Basically, even in an "equal" position, the computer will not ever say that the score is 0.00, instead it will give a minute edge to one or the other side.  

So with that background, on to the specifics!  First, if the game is just a draw due to the position (i.e. stalemate, insufficient material, etc.) most GUI's will pop up a message that says "Game Drawn", or something to that effect.  That leaves the more complicated cases that you mentioned in your question.  In order to cover most of those, I'll introduce another position.  This is taken from Morphy-NN 1-0, New Orleans Blindfold Simul:



Notice that Morphy currently has mate in 6 starting with 18.b4+!.  However, if Morphy somehow missed that this was mate, he still had a forced draw by repetition, which the computer quickly sees.  By increasing the number of variations that the computer displays, it is possible to see that after white plays a move like 18.Qxc3+?, white can still force a draw, despite being down a rook and a piece.  The evaluation of 0.00 again tips us off that this is a special position in that the computer can calculate a perpetual check.  If the moves 18.Qxc3+? Kxd5 are made on the board, then the evaluation will be 0.00, indicating that white's best continuation is to force a draw.  Failure to do this will lead to loss of the game with best play.  



So to summarize, no existing engine can say with exact certainty that a position is a draw.  However, the evaluation of 0.00 is special, and if that shows up as either the main score, or the score for a variation, that means that a draw is probably being forced in that specific line.  The easiest way to check is playfully called "spacebar analysis" - when the user hits the spacebar over and over again to force the computer to play the top recommended move.  Eventually you will get to a position that is obvious to a human as well as the machine.  



And finally, to address your point about "contempt"


  Another example is that if you need a win (i.e. a draw is just as bad
  as a loss) you might want to play a move with a slight negative
  evaluation to avoid giving your opponent the opportunity to force a
  draw. Even though this increases your chance of losing, it also
  increases your chance of winning.


This is quite simply referred to as contempt among chess programmers.  Most engines will allow you to set the level of contempt in the settings.  A positive contempt setting (100 is usually a reasonable level for analysis) will tell the engine to try fairly hard (a pawn's worth) to avoid a draw.  A negative setting will cause the engine to seek a forced draw (i.e. insufficient material, stalemate, or perpetual).