Kenny Thomas added 16 points for Radford (6-15, 1-5 Big South), which snapped a five-game losing streak.
Radford led 32-26 at halftime and by as many as 14 in the second half. Johnson's jumper gave the Highlanders a 75-64 lead with 2:37 left before Liberty made a furious comeback.
But Radford went 9-of-12 at the free-throw line in the final minute to preserve the win.
McDuffy made two free throws with 5 seconds left for an 89-85 lead. Liberty's TeeJay Bannister sank a 3-pointer -- his only field goal of the game -- with 0.3 seconds left for the final margin.
B.J. Jenkins scored 21 points for Liberty (12-10, 4-3), which saw a four-game winning streak snapped. Bannister added 19 points, including 16-of-16 from the free-throw line, and Jeremy Anderson scored 14.