An own goal by Bambo Diaby after 68 minutes and Matheus Pereira’s header nine minutes from time completed an unlikely revival after the Baggies trailed 2-0 at half-time.
West Brom were left shellshocked after conceding two first-half goals against a determined Tykes side but recovered to make it 16 points from losing positions this season.
Managerless Barnsley, seeking their first win since the opening day of the season, went ahead in the 18th minute with the first real attack of the game.
Dimitri Cavare picked out Cauley Woodrow with a superb cross from the right and the striker glanced a powerful header into the top corner of the net, giving goalkeeper Sam Johnstone no chance.
Six minutes later, Barnsley doubled their lead with a move built from the back.
Midfielder Alex Mowatt cut in from the left for Woodrow, who cashed in on the space in front of him by lashing into the far corner.
It was no more than Albion deserved after they were a distant second best in the first 45 minutes.
Normally free-scoring, the only effort they registered near goal was a deflected shot from Grady Diangana that drifted into the side-netting.
West Brom made a double change at half-time as Conor Townsend and Filip Krovinovic came on.
Instead of a revival, it was Barnsley who went desperately close to the next goal. Cameron McGeehan’s looping header hit the bar after Cavare again was the provider from the right flank.
But Diaby glanced Pereira’s corner past his own goalkeeper Brad Collins, before Pereira timed his run perfectly to head home Townsend’s whipped-in cross.
West Bromwich Albion: Johnstone, Furlong, Ajayi, Bartley, Ferguson (Townsend 46), Sawyers, Livermore, Edwards (Krovinovic 46), Matheus Pereira, Diangana (Robson-Kanu 67), Austin. Unused substitutes: Brunt, Bond, O’Shea, Hegazi.
Barnsley: Collins, Diaby, Andersen, Sibbick, Dougall (Wilks 72), Cavare, McGeehan, Mowatt, Brown, Woodrow (Ben Williams 88), Chaplin. Unused substitutes: Simoes, Bahre, Walton, Thomas, Oduor.
Referee: D Bond (Lancashire).