Colchester went close to taking an eighth-minute lead when Mark Yeates' cross was met with a towering header from Clive Platt that flew inches wide.
But Macken struck in first-half stoppage time, rifling home a loose ball low into the corner from 12 yards.
Barnsley's win owed much to keeper Heinz Muller with the German keeping out Luke Guttridge's powerful drive.
Colchester manager Geraint Williams:
"We had two or three very good chances and didn't take any of them and got caught with a suckerpunch in first-half injury-time. "Kevin Lisbie's had a great chance, Adam Virgo got in and the keeper made another great save, while Dean Gerken didn't have a shot to save apart from picking the ball out of the net.
"To be honest I thought their keeper made three or four excellent saves."
Barnsley: Muller, Van Homoet, Foster, Souza, Hassell, Campbell-Ryce (Odejayi 90), Leon, Howard, Tininho, Macken, Nardiello (Ferenczi 73).
Subs Not Used: Kozluk, Togwell, Coulson.
Booked: Howard.
Goals: Macken 45.
Colchester: Gerken, Ifil, Coyne, Virgo, White, Yeates (Guy 61), Izzet, Guttridge (Sheringham 79), Jackson, Platt, Lisbie.
Subs Not Used: Cousins, Balogh, Granville.
Att: 9,246
Ref: Nigel Miller (Durham).
Bookmark with:
What are these?