Born in Pasto, Nariño Department, and a product of hometown team Deportivo Pasto's youth ranks, Narváez spent his first two seasons as a senior with Deportivo Pasto, scoring four goals; three in the Copa Colombia and another in the Categoría Primera B. He debuted for them in the Categoría Primera B on 9 March 2011 at 16 years and 25 days of age, making him the club's youngest ever player, and in the Categoría Primera A on 28 April 2012.
In November 2012 Narváez was moved to youth academy of Real Madrid. He was highly recommended by Real Madrid legend Zinedine Zidane himself to take under their youth system. Juan was highly viewed as the next 'Falcao' due to his goal scoring abilities. Narváez made his debut for the club in the 2013 Copa de Juvenil, where he scored 2 goals in 3 appearances, winning the cup in the process, although he did not play in the final. He made his official league debut on 28 January, playing all game in a 3–0 win over Zamalek SC on Alkass International Cup. Narváez made his UEFA Youth League debut against Galatasaray, as he managed to score the tying goal in a 1-1 draw. As of September 21, he has scored 6 goals in 3 appearances for the U-17 squad of Real Madrid. Narváez scored another goal against Rayo Vallecano in a 2-0 victory a week later. During the international break in October, Narvaez scored his first hattrick for the club in a 6-1 win against Don Bosco. In the UEFA Youth League match against Juventus, Narváez scored an astonishing 4 goals, one with a penalty and while also assisting the 4th goal all in a 6-2 victory. This makes him joint top scorer with 5 goals so far. In his third match representing the C team, Narváez scored his first goal against CF Fuenlabrada, in the 82nd minute. Narváez was once again promoted, this time, into Real Madrid Castilla where he came off the bench in the 88th minute while wearing the 31 jersey. Narvaez would then score his first goal against SD Leioa by this 5th appearance.
Betis
At the start of the year 2016, Narváez signed for Real Betis on a three-year deal, being initially assigned to the B-team. On 29 January 2018, Narváez was loaned to Segunda División side Córdoba CF, where he helped to avoid relegation in the last game of the season by winning 3–0 to Sporting de Gijón. On 31 August 2018, Narváez joined UD Almería on a one-season loan. Upon returning, he was initially assigned to Betis' first team in La Liga. On 31 August 2019, Narváez was loaned to UD Las Palmas still in the second division, for one year.
International career
Narváez was repeatedly called up to participate in Colombia's U20 squad, but Real Madrid refused to release him; he was not allowed to take part in the 2015 FIFA U-20 World Cup.