Arsenal had their chances and hit the woodwork three times in total, but Mauricio Pochettino's side gained swift revenge for their Premier League derby defeat just 17 days ago as last season's runners-up crash out in the last eight.
Spurs dominated possession in the opening 20 minutes of the game, but it was Arsenal who created the better chances before the deadlock was broken and they could have taken the lead inside two minutes.
Aaron Ramsey - making his 350th appearance for Arsenal - then exchanged passes with Alex Iwobi before firing wide, but Spurs soon began to take an element of control over the game and Christian Eriksen and Alli both missed half-chances in quick succession.
Arsenal should have taken the lead against the run of play after only 12 minutes, though, as Mkhitaryan played a slick one-two with Ramsey to leave him one on one with Paulo Gazzaniga, only to put his finish too close to the keeper after trying to give him the eyes.
It proved to be a costly miss as Tottenham's growing pressure eventually told after 20 minutes when Alli released Son, who showed Mkhitaryan how it should have been done with a confident finish past Petr Cech.
A hitherto quiet Pierre-Emerick Aubameyang dragged one effort wide as Arsenal looked for a response, but Spurs could have doubled their advantage when they once again hit the Gunners on the break as Eriksen, Kieran Trippier and Moussa Sissoko exchanged passes before the latter blazed his finish over the top when he should have done better.
The hosts soon began to increase their own pressure, though, and it took a smart reaction save from Gazzaniga to deny Ramsey a stunning goal when he saw his cushioned first-time volley turned against the post.
Arsenal ended the half on top and should have equalised moments later when Ramsey's deep cross was met by a towering header from Sokratis Papastathopoulos, who could only plant his effort wide of the far post.
The Gunners could not carry that momentum into the second half and Eriksen stung the palms of Cech with a free kick 10 minutes after the restart, before Spurs got the all-important second goal just before the hour mark.
Harry Kane - on as a substitute just one minute earlier - was afforded the time and space to collect the ball on the halfway line, turn and lift his pass through to Alli, who supplied an exquisite finish by flicking the ball over Cech.
Arsenal almost provided an instant response when Alexandre Lacazette - himself only just on as a sub too - nudged Aubameyang's cut-back towards goal, only to see it bobble against the outside of the post on its way behind.
Spurs did a good job of managing the game after their second goal, though, and the closest Arsenal came to pulling one back was a mis-hit Aubameyang cross from the left which grazed the crossbar.
There was an unsavoury moment at one stage when Alli was struck by an object thrown by an Arsenal supporter, but Spurs were rarely flustered and Eriksen almost added a third with a powerful drive which needed to be turned over by Cech.
Arsenal never looked like mounting a comeback in the closing stages as Tottenham comfortably saw out the win - just their second ever triumph at the Emirates Stadium - ensuring that their name is in the semi-final draw alongside holders Manchester City, Chelsea and surprise package Burton Albion.
ARSENAL (4-2-3-1): Cech; Maitland-Niles, Sokratis, Xhaka, Monreal; Guendouzi (Nketiah 65'), Torreira; Mkhitaryan (Koscielny 46'), Ramsey, Iwobi (Lacazette 58'); Aubameyang
TOTTENHAM (4-2-3-1): Gazzaniga; Trippier, Alderweireld, Davies, Rose; Sissoko, Winks; Lucas (Kane 58'), Alli, Eriksen; Son (Lamela 79')