The home side took the lead in the third minute when Thomas Bruns took a quick free kick to catch the visitors out at the back. Jaroslav Navratil held his composure when free in the box to slot his strike past Kostas Lamprou.
Heracles doubled their lead in the 28th minute as Ramon Zomer rose highest in the penalty area to head a corner in from the right past the outstretched hand of Lamprou.
The hosts could have notched a third goal before the break when Bruns teed up Wouter Weghorst on the edge of the box, but he sent his effort over the bar.
Willem II got back into the game after the restart as Erik Falkenburg latched on to a cross into the box and steered his strike into the net.
Brahim Darri should have restored his side's two-goal cushion but he could only fire his effort over the bar when one on one with Lamprou.
The visitors pushed late in the game to find a leveller, but the closest they came was when Lesley De Sa put his strike over the bar from the edge of the area, allowing Heracles to hold out for the win.