The Stars held a 1-0 lead midway through the third period behind rookie goalie Mike Smith, who was trying for his second shutout in three games. But Pavel Datsyuk tied it 1-1 at 11:14 with his 18th goal off a setup by Zetterberg.
Zetterberg gave the Red Wings the lead at 15:24 with his 27th goal on a shot from the high slot.
Mathieu Schneider added an empty-netter with 33 seconds left, assisted by Zetterberg, to ice the victory and snap Dallas' three-game winning streak.
Mike Ribeiro had a second-period, power-play goal for the Stars.
The Red Wings got 17 saves from Chris Osgood, who started despite a broken right index finger. Detroit, routed by the Philadelphia Flyers 6-1 on Monday night, has won seven of nine.