Paqueta clashed heads with Porto defender Pepe in the very first minute of the match, but even with blood seeping through his bandage, the Brazilian playmaker stayed on the pitch to pull the strings in midfield.
Pepe did not return for the second half but Paqueta opened the scoring just before the hour mark when he steered the ball into the bottom corner, with VAR overturning an offside call in the build-up.
The referee awarded a penalty to Porto for a handball by Paqueta minutes later but then changed his mind after a second look at the VAR screen. The handball was accidental after the ball bounced up off the midfielder's knee before striking his arm.
Lyon's Portuguese goalkeeper Anthony Lopes also made a fine save towards the end of the half to deny Porto, who are top and unbeaten in the Portuguese league this season having scored in every home game so far.
Chancel Mbemba seemed to have rescued a draw for Porto in injury time when he finally beat Lopes to score the equaliser but VAR stepped in once again to rule him offside.
Filip Kostic gave Frankfurt the lead with a curling lob that sailed over the keeper and dipped under the bar before Nabil Fekir equalised on the half-hour mark for his 10th goal of the season in all competitions.
Daichi Kamada restored the lead for Frankfurt two minutes later with a cool finish into an open net after fine work by midfielder Jesper Lindstrom, who sprinted into the box to draw out the keeper and defender before providing the cutback.
The second leg for both games will be played on March 17.