Think of the outcome as a point on a probability distribution with the point spread being the median outcome. A 15.5 point favorite isn't expected to win by exactly 15 or 16. They're actually more likely to win by exactly 14 or 17 than 15 or 16 because of the way scoring works in football*. But when a team is favored by 15.5, half the time the favorite wins by 16 or more and half the time they don't, hence the spread being the median outcome.
When a spread ends "dead on" that's really just a point on the distribution and the same is true when the spread ends up 3 touchdowns away. Even with near-perfect information (think of an alternate world where you could see these teams play tens of thousands of times to get a true read on their ability) there is a ton of variability in the results of any sporting event. Think about everything that can go right or wrong in a sporting event including but not limited to playing your A/B/C/D/F game, refereeing decisions going for/against you, "game of inches" things ranging from tipped balls (do they get intercepted and returned for a touchdown or fall harmlessly as an incompletion?) to stepping on the line on a long run, injuries and on and on.
As far as the accuracy of the sports betting market, it's very efficient these days especially as you get closer to kickoff. Generally, the closing line is going to be the most efficient line. "Sharp" money rules the market. Books move their numbers on a combination of money and whose money it is. Taking a $100k bet on an NFL game from a known losing bettor is unlikely to move the line, unless they are getting very unbalanced action and need to manage their risk. But a $100k bet from a known winner or an unknown (who could possibly be a runner for a sharp bettor) will likely see some movement. The other thing is that money flows to winners pretty quickly in sports betting** so the winning bettors tend to have a lot of money for betting purposes. If the line starts moving away from what it should be due to "public/square" money, they'll snap it right back with big money of their own.
*There is a tool called the
Half-Point Calculator. It has a number of uses but it tells you how often a point spread or over/under lands on an exact number (when the spread or total is close to that number, it's not intended to tell you how often a 25 point favorite loses by exactly 3 or anything like that).
**There is a tool called the
Kelly Calculator which calculates your proper bet size for optimal bankroll growth based on your win rate, the odds you're getting and the size of your bankroll. Stick the following inputs in: starting bankroll=$50,000, consecutive series=1000, odds=-110, win prob=55% and hit calculate. You'll see that after 1000 bets (which isn't very many for a sports bettor when you consider not only football but basketball, baseball, hockey and soccer leagues around the world) you'll have a mean bankroll of over $750,000 and a median bankroll of almost $200,000. And that's with only a 55% win-rate! So the market ends up being pretty efficient by necessity.