Pep Guardiola's side made the perfect start through Julian Alvarez, who struck the opener after 16 minutes.
The visitors came roaring back, as Joao Cancelo was sent off for bringing Harry Wilson down inside the box, before Andreas Pereira converted the resulting spot-kick.
Haaland was introduced from the bench with just under 30 minutes remaining and the striker proved to be the difference, slotting in a stoppage time penalty to send the Etihad wild.
The striker admitted he felt the pressure before the penalty, but was elated to find the net.
"Fantastic. I was nervous [for the penalty]. It was one of the most nervous moments of my life, but fantastic," he said.
"A penalty in the last minute, of course I would be nervous. But it was an amazing feeling.
"I don't care how it went it, it is about it going in. I love it. I have been injured for a week and it is really important to win."
The Norwegian had been sidelined with a knock after being withdrawn at half-time in matchday five of the UEFA Champions League group stage against Borussia Dortmund.
The striker made his return to the matchday squad against the Cottagers and after getting on the pitch, continued where he left off, netting his 18th Premier League goal of the season.
"For me it was about coming in with some energy and try and get a goal because these three points are really important. It was about trying to get it and that is what we did.
"When you go 10 v 11 for 70 minutes it is difficult, I don't think any team would do it as good as we did it today.
"I was one week out and finally I am back. It's a good feeling.
"I want to play every game," he declared. "It's difficult [to be on the sidelines] but in the end we need three points and that is what we got.
"I am so tired, but so happy. You have no idea."