Alexandre Lacazette had sent the Gunners ahead in the 14th minute, but Ayoze Perez levelled the scores before Matt Ritchie won it in the second period for a Magpies side who have overcome Arsenal in a home Premier League game for the first time since December 2005.
Newcastle have now won their last four Premier League matches, and the victory has moved them onto 41 points - 13 points clear of the relegation zone. Arsenal, meanwhile, stay in sixth position as their poor away form continued.
Newcastle boss Rafael Benitez named an unchanged team from the one that started last weekend's 2-1 victory at Leicester City. As a result, Perez again supported Dwight Gayle in the final third, with Kenedy and Ritchie in the wide positions.
As for Arsenal, there was a Premier League debut for 18-year-old midfielder Joe Willock as Arsene Wenger shuffled his pack. Pierre-Emerick Aubameyang and Lacazette both started in the final third for the Gunners, while there were also positions in the XI for Calum Chambers and Rob Holding.
Arsenal had the first half-chance of the match in the fifth minute, but Lacazette - who had worked some space in a dangerous position - could only drag the ball wide of the far post.
Kenedy managed Newcastle's first attempt in the ninth minute, but the Brazilian's strike was comfortable for Arsenal goalkeeper Petr Cech as both teams had their moments in the early exchanges.
It was the visitors that took the lead in the 14th minute when Lacazette managed to convert a Aubameyang cross at the far post, with the former Lyon striker stretching to fire the ball into the back of the net.
Newcastle levelled the scores in the 29th minute, however, when Perez turned a low DeAndre Yedlin cross into the back of the net after Gayle had gathered a long pass from Jonjo Shelvey before delivering wide.
Chambers had a decent chance to send Arsenal back ahead seven minutes before the break, but the defender turned a Shkodran Mustafi header wide at the far post, before Willock scuffed the ball past the Newcastle goal in the 43rd minute following good work from Lacazette.
Arsenal had 80% of the ball in the first 10 minutes of the second half, but neither side created an opportunity of note during that particular period of the match.
Islam Slimani came off the Newcastle bench just past the hour, and the centre-forward immediately made a difference, with his presence allowing Ritchie to get a shot away in the 65th minute, but the ball flew over the Arsenal crossbar.
Iwobi then fired just wide of the home side's goal in the 67th minute during an open period.
It was Newcastle that scored the game's third goal in the 68th minute, however, when Slimani's towering header was flicked into Ritchie's path by Perez, and the Scotland international finished into the back of the net.
Kenedy had one deflected onto the Arsenal crossbar in the spell that followed, before Perez hit the side-netting following excellent work from Slimani once again.
The Gunners put the pressure on in the latter stages as they looked to avoid their 11th Premier League defeat of the season, but Newcastle held on to all but confirm their survival in the top flight.
NEWCASTLE (4-4-1-1): Dubravka; Yedlin, Lascelles, Lejeune, Dummett; Kenedy, Shelvey, Diame, Ritchie (Murphy 86'); Perez (Joselu 79'); Gayle (Slimani 63')
ARSENAL (4-3-3): Cech; Chambers (Maitland-Niles 78'), Mustafi, Holding, Monreal; Elneny, Willock (Welbeck 68'), Xhaka; Iwobi (Nketiah 86'), Aubameyang, Lacazette