The win extended Milan's unbeaten league run to 13 matches, with nine wins in that run.
Milan head coach Massimiliano Allegri watched from the stands as he served a one-match ban after being sent off in the previous 1-0 victory over Lazio, and he would not have been pleased with the early moments.
Fikayo Tomori was penalised for handball while grappling with Che Adams in the box, and referee Daniele Chiffi pointed to the spot. Mike Maignan got a touch to Nikola Vlasic's penalty in the 10th minute, but the Croatian still found the net to give Torino the lead.
Torino doubled their advantage soon after. Vlasic turned provider as he slipped a pass through to Duvan Zapata, and the Colombian's powerful strike went through Maignan. It marked Zapata's eighth career goal against Milan and his third goal in three starts against them in Torino colours.
Milan responded through Adrien Rabiot. With little obvious danger in the 24th minute, the French midfielder let fly with a swerving long-range effort that flew into the top corner and gave goalkeeper Franco Israel no chance.
After the break, Milan increased the pressure. Israel produced an outstanding double save to deny Davide Bartesaghi's header and then Samuele Ricci's rebound. The equaliser came in the 67th minute when Pulisic, introduced seconds earlier, reacted quickest to a loose cross and finished from close range for his sixth league goal of the season.
Milan completed the comeback ten minutes later. Ricci surged down the right and delivered a perfect cross, and Pulisic powered the ball home to make him joint top scorer in Serie A.
After the match, Pulisic said: "We showed real character to turn this around. This team never stops believing."
The result sent Milan back to the top of the table, while Torino remained 16th and extended their winless league run to six matches, with three draws in that spell.