Let's go over some key years from his career as provided by StarTrek.com.
Year 2333: Assigned as commander and first officer on U.S.S. Stargazer.
Year 2355: Promoted to captain of Stargazer after death of his superior in battle.
Year 2363: (or 2364?) Chosen to command relatively new Galaxy-class U.S.S. Enterprise-D.
Year 2372: Chosen to command relatively new Sovereign-class U.S.S. Enterprise-E.
He had a 22-year career as first officer and later captain of the U.S.S. Stargazer with an even more impressive record as captain of the fleet's former flagship U.S.S. Enterprise.
Like an admiral, he has led multiple ships several times. He's comfortable handling sensitive diplomatic negotiations like a diplomat. The man should have been promoted to admiral or appointed as ambassador. Yet, he's still just a captain.
He was offered a promotion to admiral if he would become the commandant of Starfleet Academy, but he turned that down. (I think that was in the second season of ST:TNG.)
Others have been promoted faster than him. Riker became captain after spending less time as Commander than Picard. Captain Janeway became admiral after only 7 years as captain (years 2371 to 2378).
Why hasn't Picard been promoted yet?
Did he annoy some superior officers?
Was he held back in his career?
Did he choose to stay a captain?
Was it because Starfleet lost many good captains in the battles against the Borg? (You could say Starfleet could not afford to promote him because they needed good captains after the two Borg invasions.)
Was it because Starfleet wasn't sure about him after his assimilation? (It was mentioned in the First Contact movie they had some reservations about him going against the Borg.)