Momentum swung back and forth in the first half, with Roscommon jumping out to an early 0-7 to 0-3 lead.
But Armagh answered back with five straight scores, four of which came from Alex O’Boyle frees, the pick of the bunch being scored from his own 45-metre line.
Armagh were reliant on O’Boyle’s frees, as he scored all but one of their 10 first-half points. Roscommon meanwhile had seven different first-half scorers, including Cian Murray and Conor Mulry, whose shooting helped them take a 0-14 to 0-10 lead in at half-time.
Armagh upped the intensity and had another purple patch at the beginning of the second half, and they scored seven of the first eight points to go two ahead with 15 minutes to go.
Substitute Tomas Galvin caused problems for the Rossies’ defence with two points from play, while O’Boyle continued to comfortably chip over frees – as well as a beauty from play under pressure.
Armagh could have pulled further ahead when Roscommon goalkeeper Enda Lawless lost possession 10 metres out from his goal, but Paul Gaffney dragged his shot beyond the far post, with the net wide open.
However, Roscommon were able to muster a late surge, with four points from Conor Cosgrove helping them tie the game at 0-20 apiece, before Hardiman came up with the moment of magic, scoring from out on the right wing late in stoppage time to win it at the death.
Scorers – Roscommon: C Murray 0-6, C Cosgrove 0-4 (2f), C Mulry, P Fallon (2f, 1sl) 0-3 each, J Hardiman 0-2, B Lawlor, B Mulry, J Martin 0-1 each. Armagh: A O’Boyle 0-13 (10f, 2’65), T Galvin 0-3, J O’Connor, F Donnelly, B Shortt, C Renaghan 0-1 each.
Roscommon: E Lawless; M Ward, J Dillon, D Mullen; J Donnelly, C Cosgrove, Jack Dowling; D Finn, J Hardiman; C Murray, C Mulry, B Lawlor; B Mulry, J Martin, P Fallon. Subs: S Canning for B Mulry (42), L Coyle for J Dowling (54), R Fallon for Lawlor (54), A Donnelly for P Fallon (65).
Armagh: F Woods; T Nevin, D Fox, N Lennon; B Shortt, O O’Hare, P Gaffney; S Renaghan, A Fox; C Renaghan, J O’Connor, A O’Boyle; F Donnelly, C Duffy, L O’Flaherty. Subs: T Galvin for Duffy (35+1), R Gaffney for O’Flaherty (44), O Curry for A Fox (47), S McGuinness for O’Connor (57), P McBride for Donnelly (68).
Ref: M Connolly (Sligo)