The derby was goalless at half-time, although Real had several complaints about the officiating. They wanted Atletico defender Cristian Romero sent off after he caught Jude Bellingham with his studs, but VAR reviewed the incident and the Argentine was shown only a yellow card.
The turning point came shortly after the restart when Giuliano Simeone was brought down in the area by Huijsen. The Real defender was shown a straight red card following a VAR review, leaving Jose Mourinho's side with 10 men.
Alejandro Grimaldo gave Atletico the lead from the resulting penalty, although Thibaut Courtois initially kept the spot-kick out before the home side reacted quickly.
Atletico then took advantage of their numerical superiority six minutes later. Giuliano Simeone created the opening with a run down the right before his cross found Jonathan David, who finished to make it 2-0.
It was the Canada international's third goal in as many LaLiga matches.
Real struggled to create a response, with Kylian Mbappe and Vinicius Junior largely unable to influence the contest. VinÃcius was replaced by Yan Diomande shortly after Huijsen's dismissal, while Courtois made further saves to keep the visitors within reach.
Real eventually gave themselves hope in the 89th minute when Antonio Rudiger headed in from Bernardo Silva's free-kick.
There was no late equaliser, however, as Diego Simeone's side held on for a victory that takes them to 16 points, five behind leaders Barcelona.
Real remain third on 15 points, six adrift of Barcelona after suffering their second league defeat of the season.