Yes, I have seen programs that attempt to explain why a move is good or bad in language. Chessmaster 9000 would do this.
Many engines will show you the best line for each move. So it can tell you that if you play g6, it expects the game to go f5 gxf5 Nxf5, whereas if you play b6 it expects the game to go a5 bxa5 Bxa5. Often from there you can see why the move was good or bad. But sometimes it's still very subtle.
There is a tool herehere where you can input a position and it will tell you exactly why Stockfish evaluates the position the way it does. It only works for a static position (it doesn't look ahead at all), but it's still interesting.