They claimed a first-half try from flanker Abraham Steyn, with fly-half Tommaso Allan kicking a penalty and conversion, before wing Edoardo Padovani crossed late on.
Wales were ultimately deserved winners, yet they will be frustrated at not collecting a winning bonus point, which might prove costly in the final championship shake-up.
Head coach Warren Gatland made wholesale changes following last week's comeback victory over France, handing Six Nations debuts to Leicester wing Jonah Holmes and Wasps flanker Thomas Young, plus first Six Nations starts for scrum-half Aled Davies and back-row forward Aaron Wainwright.
Italy were soon in trouble, conceding a penalty after just 27 seconds for not releasing, and Biggar kicked Wales in front.
Biggar then doubled Wales' advantage through a second penalty 12 minutes later as the visitors dominated territory and possession.
Italy, apart from a break by wing Angelo Esposito, showed nothing in attack, being pinned on the back foot as Biggar completed a penalty hat-trick inside the opening quarter to put Wales 9-0 ahead.
Biggar, back in the starting line-up ahead of Gareth Anscombe, was at the heart of Wales' attacking game.
His work under the high ball almost created a try out wide for Holmes, but, with Italy continuing to show poor discipline, he accepted another penalty chance to make it 12-0 after 29 minutes.
French referee Mathieu Raynal adopted a surprisingly lenient approach in terms of possible yellow cards, given Italy's consistent transgressing, but the Azzurri stunned Wales eight minutes before half-time.
They sacrificed a kickable penalty to go for the corner and great work by their forwards proved too much for Wales' defence as Steyn powered over for a try that Allan converted, making it 12-7.
It was a warning shot for Wales and they trooped off at the break with only a five-point advantage, although it should have been less as a short-range Allan penalty hit a post.
Allan, though, made amends for his miss just four minutes into the second period, finding the target from a similar range as Wales' lead was further eroded.
Gatland made his first changes 10 minutes into the second period, sending on regular skipper Alun Wyn Jones for Jake Ball and replacing prop Samson Lee with Dillon Lewis.
And Wales claimed their first try shortly afterwards as Jonathan Davies found Liam Williams out wide and he delivered a scoring pass to Adams.
Biggar converted, but it was his final act of the match as Gatland then sent on Anscombe to replace him with Wales leading 19-10.
The final quarter saw Watkin cross for Wales and Padovani cancel that out as Wales closed down the clock on a game and performance that will not live long in the memory.