The Gunners, beaten by rivals Tottenham on Saturday, had been top of Group H and thrashed the Portuguese side 6-0 in their opening fixture.
However, a much-changed side never hit top gear and were denied a cast-iron penalty by Hungarian referee Viktor Kassai before Braga scored two late breakaway goals from Brazil striker Matheus, leaving Arsene Wenger’s men not yet assured of their place in the last 16.
Wenger had made seven changes from the team which threw away a 2-0 lead at home to Spurs, including a return for Denmark striker Nicklas Bendtner, who had previously hit out at a lack of opportunities.
The Estadio Municipal was carved out of the Monte Castro quarry ahead of Euro 2004, making for a stunning setting.
However, the stadium was well below its 30,000 capacity and hardly produced a hostile atmosphere for the Gunners, who won in Belgrade earlier this season but were beaten in their last away European tie at Shakhtar Donetsk.
Braga took inspiration from Arsenal to change their kit to red and white in 1921, but it was the men in yellow who started brightly as Theo Walcott looked dangerous down the right.
The home side had a free-kick when Eboue blocked Matheus, with centre-back Moises heading over when the ball was swung into the area.
After 18 minutes, Walcott flicked the ball on to Bendtner, who played Cesc Fabregas into the right side of the area, but the Arsenal captain was off balance and fired his angled shot over.
The visitors continued to enjoy plenty of possession, but were not creative enough in the final third.
As the half-hour mark approached, Walcott again scampered away down the right before cutting the ball back across the six-yard box, but Bendtner was unable to make up the ground.
Emmanuel Eboue was tripped by Leandro Salino to concede a free-kick 20 yards out, just right of centre. Fabregas beat the wall with a placed effort, but goalkeeper Felipe was alert to tip it over the bar.
On 34 minutes, the Fabregas delayed his pass on the counter-attack to release Walcott into the Braga box, but Felipe was out quickly to make the block.
At the other end Lima flashed a 20-yard drive wide before Bendtner went down 25 yards out, only for Fabregas to drill the free-kick wide.
Braga gave away possession with some stray passes at the start of the second half, but Arsenal were unable to capitalise from promising positions around the penalty area.
Salino tugged back Wilshere to concede a free-kick in a central position, some 28 yards out, but Walcott whipped a curling effort just over the crossbar.
As the hour mark approached, Fabregas turned on the edge of the penalty area to make space for a shot, which drifted wide.
At the other end, Matheus dragged his low strike across goal after cutting in from the left.
Luis Aguiar then profited from Sebastien Squillaci’s half-clearance as the ball dropped to him on the edge of the box, but the Uruguayan fired wide.
Fabregas’ run into the Braga box was picked out by Wilshere, but the Arsenal captain just could not bring the ball down.
On 69 minutes, Wenger made a change when Nasri replaced Fabregas, who had been troubled by a hamstring complaint and went straight to the changing room.
Tomas Rosicky’s cross was put behind as Bendtner looked set for a tap-in from two yards, and on 72 minutes the Dane was replaced by Marouane Chamakh.
Mexico winger Carlos Vela was sent on for Walcott and immediately found himself booked for diving by the referee when it seemed a clear trip by Alberto Rodriguez in the area.
And Braga rubbed salt into Arsenal’s wounds with seven minutes remaining as they snatched a goal on the break.
While Emmanuel Eboue was off the pitch needing treatment on an ankle injury, Matheus scampered clear to beat Lukasz Fabianski.
Arsenal were forced to play on with 10 men, but despite throwing everything forward they could not find a way back and were again hit on the break in stoppage time.