It looked like Jose Mourinho's men were going to be in for a frustrating night in Spain when they had the better of the first half but failed to take advantage of their goalscoring opportunities, a familiar theme from their Premier League campaign.
But in-form Rashford, who also scored a dramatic extra-time winner against Anderlecht in the quarter-finals, fooled Celta goalkeeper Sergio Alvarez with his set-piece to ensure United take an away goal and an aggregate lead back to Old Trafford for next week's second leg.
A place in the Stockholm final on May 24 against either Ajax or Lyon is at stake for the winners, Ajax looking the most likely opponents after winning the first leg of the other semi-final 4-1.
Celta created the first opportunity of note, Nemanja Radoja's inswinging cross headed poorly wide by an unmarked Daniel Wass from six yards.
United responded strongly with only a stunning one-handed Sergio save keeping out Rashford's fine curling strike from 20 yards after the England international had worked space for himself outside the area.
And the visitors squandered two further chances before the interval, Henrikh Mkhitaryan missing the first when his left-footed shot was saved by Sergio, the returning Paul Pogba – back as one of six changes from Mourinho - having sent him through on goal.
And Jesse Lingard was the next to miss an excellent scoring opportunity, his strike lacking the placement and power required to beat Sergio after Rashford had set him up with a neat pass, meaning the match was level at the break.
Celta came out strongly in the second half, Iago Aspas flicking a header wide from Wass's cross, before Pione Sisto's deflected strike was tipped over by United goalkeeper Sergio Romero.
But it was United who made the breakthrough with 23 minutes remaining after Hugo Mallo had brought down Rashford 20 yards from goal.
Rashford took the free-kick himself and sent his effort into the far corner, deceiving goalkeeper Sergio who had wrongly anticipated the 19-year-old shooting for the other corner.
Celta tried to respond when Aspas volleyed wide after a one-two with Jonny and Lingard blasted wide from 15 yards at the other end after a loose ball fell into his path as United threatened to strengthen their position further.
Rashford appeared to limp off in the closing stages as he and Mkhitaryan were replaced by Anthony Martial and Ashley Young.
And Mourinho's injury headache got worse as Young – only on the pitch for 11 minutes - had to be replaced by Chris Smalling, who himself was making his return from a spell out of action, but United were still able to hold on for a valuable victory.