Well, football players do get endorsement deals, but less than other sports:
1) There's 22+ players on the field every game for football, vs. 5+ for basketball. (There are also 32 NFL teams vs 30 NBA/MLB, but that's a tiny difference.) There's just more players out there splitting the ad deals.
2) Football season is the shortest of the big three. If you want your ad to tie in with the sport being played, you only get 5 months for NFL, vs. the almost 9 months out of the year in the NBA (and 8 months of the year in MLB).
3) Football franchises are badly located. No LA teams, only one Chicago team, a lot of teams tied to near-historical backwaters (Cleveland, Pittsburgh, don't even get started on Green Bay).
4) The Uniforms. Let's be honest, they severely hamper people's ability to associate the player with a face. I consider myself an average fan and I couldn't pick James Jones out on the field without the number/name, much less his face. Think of it this way: unless you follow hockey, can you identify a single NHL player's face? I can't.
5) And to be honest, the injuries. An NFL player is far more likely to get injured in his career than NBA/MLB players; he's also more likely to suffer the kind of injury that has him literally not appearing in games until the next season starts 9+ months from now. Advertisers generally don't like to hire people that disappear from the public eye for nearly a year.
All-in-all, sponsorship deals in the NFL are another reason why I don't get upset when players engage in extreme negotiating hardball. They just have less to gain there than the other sports, and need to max their on-the-field deals.