Hulk's classy dink gave the Russian Premier League side an early lead and, after goalkeeper Artur was dismissed for preventing what would surely have been a second goal, Witsel headed home against his former club to complete a comfortable victory.
It gave Zenit an 11th successive victory in all competitions and left Benfica to reflect on their first defeat of the season.
Victory will be particularly sweet for Zenit coach Andre Villas-Boas and Hulk, who previously impressed at Benfica’s rivals Porto and were booed before kick-off.
Resounding chants reverberated around the Estadio da Luz in the lead-up to kick-off, but it took just five minutes for Zenit to silence the home supporters.
Oleg Shatov burst through the midfield and slid the ball behind the Benfica backline for Hulk to run onto. Artur raced from his line to close down the Brazilian, but the 28-year-old produced a delightful dinked finish to break the deadlock.
Hulk almost doubled the lead minutes later, crashing a fierce, low free-kick against the post.
It awoke Benfica. Eduardo Salvio made a purposeful dart forward, but his shot, albeit fierce, was comfortably parried by Yuri Yodygin.
Yet just as they were beginning to threaten, the hosts' hopes were all but extinguished.
Shatov once again unlocked the Benfica defence with another fine through ball. Danny latched onto it and knocked it past the onrushing Artur, who hauled the Zenit captain down just outside the box.
Referee Svein Oddvar Moen brandished the red card to the keeper, prompting Jorge Jesus to sacrifice playmaker Talisca for reserve goalkeeper Paulo Lopes.
Hulk's ferocious, goal-bound strike from the resulting free-kick was deflected wide by an outstretched leg, but from the following corner Danny found the unmarked Witsel, who fired home despite the best efforts of Lopes.
The hosts began the second half by taking the game to their opponents, as Salvio cleverly cut inside Domenico Criscito, only for his penalty appeals to be waved away before Luisao's header forced Lodygin into a smart save.
Shatov then sent Hulk through on goal, but his strike across goal came back off the post.
After 72 minutes, Nicolas Gaitan then tricked his marker down the left and cut inside, only to fire straight at Lodygin.
Zenit defended astutely thereafter to hold out for a precious away victory, leaving Benfica with it all to do with Monaco and Bayer Leverkusen in wait.