Mustafa Saymak fired the hosts ahead in the 14th minute with a powerful strike from the edge of the box into the far corner.
Heracles levelled the scores in the 36th minute through Thomas Bruns, who was slipped into the box, before keeping his composure to finish low past the keeper.
On the stroke of half time Zwolle retook the lead when Tomas Necid scored from the penalty spot.
Mark Engberink was sent off for the visitors in the 80th minute and Zwolle made their numerical advantage count soon after when Stef Nijland slotted in after the ball had come back to him off the post.
In stoppage time Zwolle sealed the win when Jesper Drost latched onto a ball over the top, before he skipped past a defender and drilled a low shot into the bottom corner.