Full-time from The Den
In a bruising, physical encounter, Romeo's superb 88th-minute finish finally settled a tie that saw both striker Steve Morison and midfielder Ben Thompson forced off injured by the time the second-half had got underway.
Lions boss Neil Harris made one change to his starting XI, bringing in Shaun Hutchinson for Lee Gregory in a move that saw Tony Craig switch to left-back, Shane Ferguson move further upfield and Aiden O'Brien partner Steve Morison in attack.
During a bruising first-half Harris' men started brightly and an early move saw midfield powerhouse Thompson pick his way past a handful of challenges on a penentrative run that finished with his inviting cross dropping just beyond the reach of Fred Onyedinma.
Another searching delivery, this time from Morison after a nice interchange with Craig on the left, saw the striker's delivery bundled clear by the visiting defence as Millwall searched for the breakthrough.
But it was Southend who conjured the first clear scoring opportunity on the quarter hour mark when Anthony Wordsworth picked out the unmarked Stephen McLaughlin, whose goalbound effort was brilliantly cleared off the line by Thompson.
It took a smart save by Jordan Archer to keep out Ryan Leonard's arrowed drive and then O'Brien was in one-on-one with Shrimpers keeper Mark Oxley, but saw his initial effort blocked and fired the follow-up over as the two teams traded chances.
A quick break by The Lions looked promising when Romeo charged down the right and drove a low cross that O'Brien just couldn't get his boot to.
However the home side were forced to make a change when talisman striker Morison was stretchered off following a collison with Ryan Inniss just before the break, and the same Southend player was involved in another collison on the stroke of half-time, ending midfielder Thompson's evening with a poor challenge.
Southend came out after the break on the front foot and Leonard was a whisker away from firing the visitors into a 57th-minute lead with a 25-yard piledriver that flashed inches past the upright to the relief of the home crowd.
The visitors were enjoying their best spell of the game at this stage and it took some dogged defending by The Lions to weather the storm with the back four doing a supreme job on their way to recording a first clean sheet in 12 games.
As the game edged towards the final quarter of an hour Harris introduced former Southend winger David Worrall with his third and final change of the night.
The sub, on for Shane Ferguson, so nearly made a sensational introduction with his very first touch when a dinked through ball down the line was picked up by Gregory, he in turn squared to Worrall at the back post, but the winger's stinging shot was beaten away by keeper Oxley.
Hutchinson thumped a half-volley over from a corner as the pendulum began to swing Millwall's way, but it looked as though time was not going to be on The Lions' side.
With the game edging towards full-time and a replay, right-back Romeo picked up the ball from Worrall, weaved his way into the penalty area and let fly with an arrowed drive that flew into the bottom corner.
It could have been 2-0 moments later when Shaun Williams was clean through on goal, but clipped his effort wide of an empty net.
Gregory had another opportunity in a frantic finale that also saw Southend's Marc-Antoine Fortune denied an equaliser by another smart stop from Archer, but it was The Lions who held firm for the narrowest of wins to take their place in Monday night's draw.
Millwall: Archer, Hutchinson, Craig, Williams, Thompson (Butcher, 46mins), Onyedinma, Romeo, Webster, Ferguson (Worrall, 76mins), Morison (Gregory, 42mins), O'Brien. Subs not used: Martin, Abdou, Smith, King.
Booking: Archer (45+2mins)
Scorer: Romeo (88mins)
Southend United: Oxley, Coker, Wordsworth, Thompson, Cox, McLaughlin (McGlashan, 73mins), Atkinson, Fortune, Leonard, Demetriou, Inniss (Sokolik, 81mins). Subs not used: Smith, White, O'Neill, Timlin, King.
Bookings: Wordsworth (66mins), McLaughlin (68mins), Cox (83mins), Leonard (90+5mins)
Att: 4,502 (away 943)
Tweets by @MillwallFC