The on-loan Blackpool striker spurned a one-on-one opportunity early in the first half but made amends with an hour gone, finishing from close range the after Iron goalkeeper Josh Lillis had tipped Nathan Doyle’s 30-yard drive onto a post.
Seven minutes remained when Harewood capitalised on an error from Scunthorpe left-back Ben Gordon to put the game firmly in the Tykes' control.
Much of Scunthorpe’s good work came through midfielder Michael Collins and he reduced the arrears in stoppage time.
The victory all but ends any lingering fears of relegation for Barnsley, moving them 12 points clear of Ian Baraclough’s Iron, who remain third bottom and have now lost seven consecutive games away from home.
The Iron were unchanged from the weekend victory over high-flying Swansea, while Jim O’Brien replaced Garry O’Connor in the only alteration to the Barnsley side that claimed a 0-0 draw at Derby.
Harewood had the games’ first chance when he raced clear of the visitors defence in the seventh minute, only for Lillis to avert the danger at the second attempt.
The Tykes momentarily appeared to grasp the initiative and Danny Haynes headed into Lillis’ arms from a teasing Kieran Trippier cross.
Barnsley captain Shackell might have given his side the lead when he leapt to head over from close range in the 19th minute following a well worked short corner.
Shackell was soon called into action in his own penalty area, hacking Gordon’s dangerous cross out of the goalmouth, before Collins’ rasping shot from the right channel was impressively punched clear by home keeper Luke Steele.
Paul McShane volleyed wide from a Trippier corner shortly after the half-hour, while Scunthorpe’s Joe Garner headed a Collins’ set-piece off target.Steele unconvincingly tipped a Collins free-kick over when the action resumed but the home side were in front with an hour gone.
Jay McEveley’s left-wing cross was only cleared as far as Doyle. Lillis did well to tip the midfielder’s effort onto the upright and was unfortunate to see Harewood tap home.
The Iron almost hit straight back when Andy Hughes’ cross found Gordon and the full-back’s eventual prod goalwards was hacked off the line by Shackell.
Another McEveley cross was only partially cleared with 10 minutes remaining and Barnsley’s on-loan Chelsea midfielder Jacob Mellis lashed over from 10 yards.
Harewood settled the contest in the 83rd minute when Gordon made a hash of a long clearance, leaving the former West Ham player to lift calmly over Lillis into the net.
Harewood almost completed his hat-trick when he once again lobbed Lillis after receiving a sumptuous long ball from Tykes substitute Jacob Butterfield, but this time his effort fell wide.
Collins ensured a nervy finish for the home side when he slammed home from five after Steele parried a shot from sub Mark Duffy.