Paul Gallagher squandered a great early chance before Colchester took a 17th minute lead through Rhys Healey, who netted from close range after Jamie Jones had denied Alex Gilbey.
But the Lilywhites responded with two goals in four minutes, midway through the half.
Scott Wiseman shook off Sanchez Watt’s challenge before firing past Sam Walker, before Alan Browne blasted in from close range after Ben Gordon had hesitated inside the area.
However, Colchester equalised eight minutes before half time through Gilbey, whose 25-yard stunner flew past Jones.
Gallagher’s long-range shot eluded Walker and flew in less than two minutes after the break, to restore Preston’s lead.
Garner hit the woodwork before the hosts extended their lead just before the hour when Chris Humphrey raced onto Gallagher’s defence-splitting pass and evaded Walker, before tapping in.
Substitute Callum Robinson’s fine effort came back off the crossbar and Jones denied Freddie Sears, as Preston won an entertaining contest to maintain their unbeaten home record this season.