Phil John scored the only try of the game as the Scarlets won only their fourth Celtic League match this season.
The prop forced himself over from a few yards out after John Davies' 20-yard drive towards the Ulster try-line.
Scarlets fly-half Gareth Bowen missed his first four attempts at goal, but recovered his compsure to land five penalties and a conversion.
Ulster never once threatend to score a try and managed only three peanlties from fly-half Adam Larkin.
After screwing four penalty attempts horribly wide of the posts in the opening half hour, Bowen finally put one over just before the interval.
The Scarlets enjoyed 70% of first half possession, but Bowen's misses and two Larkin penalties gave Ulster a 6-3 half-time lead.
Both sides continued to struggle with ball in hand after the break, so it was left to the two fly-halves to keep the scorers busy.
Larkin struck first, but Bowen replied with three penalties to put the Scarlets ahead for the first time with less than half an hour to play.
And when prop John finished off a rare example of quality attacking rugby, there was no way back for Ulster.
Bowen added the conversion and another late penalty to finish with a 17-point personal tally.
Said Scarlets director of rugby Gareth Jenkins: "This was an important step forward for me and for the younger men in the team to start enjoying it.
"Hopefully this will help our confidence to grow."
Llanelli: B Davies; G Evans (capt), T Selley, S Finau, A Havili; G Bowen, M Phillips; P John, A Gravelle, J Davies, A Jones, C Wyatt, J Mills, G Thomas, D Hodges.
Replacements: D Williams, M Rees, V Cooper, I Cunningham, C McDonald, A Thomas, G Evans.
Ulster: B Cunningham, T Bowe, J Bell, P Steinmetz, A Maxwell; A Larkin, K Campbell; R McCormack, P Shields, R Moore, G Longwell, R Frost, M McCullough, N Best, C Feather (capt).
Replacements: N Brady, B Young, R Wilson, G Pfister, N Doak, S Young, T Howe.
Referee: Mike Hall (Scotland)