Richmond's Darien Brothers sank both free throws, extending the lead to 52-49 with three seconds left.
That gave the Hawks a final chance, but Carl Jones missed a leaning, running three-pointer at the buzzer.
The loss dropped St. Joseph's to 18-11 overall and 8-6 in the A-10. Richmond, which beat Temple earlier this season, improved to 15-14, 6-8.
St. Joseph's had to overcome the rare three-point shooting and overall effort of Williams, a 6-foot-6, 275-pound sophomore. Williams entered the game having made just 9 of 35 three-point attempts. On Wednesday, he made all three of his three-point attempts and led the Spiders with 17 overall.
Richmond, who had led by a single point, 25-24, at halftime, went on a 9-0 run early in the second half, hitting three consecutive treys to extend its lead to 40-29 with fewer than 15 minutes remaining.
Williams committed his fourth foul with 5 minutes, 52 seconds left and left the game. St. Joseph's center C.J. Aiken made one of two free throws to cut the margin to 46-40.
Five seconds later, St. Joseph's forward Ronald Roberts was called for a foul and was assessed a technical foul. Richmond's Darien Brothers missed both free throws on the technical.
The Spiders went up 49-40 when freshman Kendall Anthony hit a three-pointer.
But the Hawks came back.
With 3:33 left and Richmond leading 49-43, Anthony hit a forced three-pointer that the officials ruled was taken after the shot clock expired. Richmond protested and appeared to have a good argument, but the play couldn't be reviewed because it was a judgment call.
Guard Langston Galloway's trey got the Hawks to within three, at 49-46, with 2:19 left. After Richmond's Cedrick Lindsay missed a turnaround jumper in the lane, St. Joseph's called timeout, still trailing 49-46 with 45.7 seconds left.
Jones then tied the score on a three-point field goal with 32.8 seconds left.
Galloway finished with 15 points for St. Joe, including 10 in the first half. Jones added another 10.
Contact staff writer Marc Narducci at mnarducci@phillynews.com, 856-779-3225 or @sjnard on Twitter.