The Spain centre-back, playing his first match since recovering from a knee problem, landed awkwardly after leaping for the ball at a corner.
The 34-year-old club captain was stretchered off in pain in the 78th minute and replaced by Alex Song as his shocked team mates looked on.
The injury comes at a delicate time for Barca with Puyol's defensive partner Gerard Pique sidelined and Real Madrid visiting the Nou Camp on Sunday for the opening 'Clasico' of the domestic league season.
Barca won in Lisbon, their second victory in two Group G games, thanks to a goal in each half from Alexis Sanchez and Cesc Fabregas.
The Catalans are also eight points ahead of Real in La Liga after six matches.