The NBA is a soft cap, which means teams can go above the cap to re-sign their own players. They also have guaranteed contracts so, if you re-sign a player, you're stuck with his salary (unless another team signs that player for the same or more money). Because of this, many teams are always over the cap and are stuck signing one player for the veteran's mid-level exception (it was 4 1/2 million, I'd have to imagine it's a bit more now) or an unlimited number of players for a minimum contract. But they can't make any big free agent signings because they're so far over the cap (often with players who retired several years earlier) that they can't clear up space. And when they do clear up space, it has to be to pay their draft picks who have set salaries depending on where they were drafted. It's also more difficult to trade players because, when both teams are over the cap, the salary of the players traded have to match (why you'll see three team deals). In addition, because you can go over the cap to re-sign your players but can't do it when the player goes to a new team, there's an incentive to stay with your team. Plus, if you can only give a certain percentage as a raise in a new contract, so you can't really just sign a minimum contract and then sign a larger contract later.
Salary Cap Hell is basically a position where a team can't do anything in free agency and the draft is never good enough to help so they have to hope to trade their expensive contracts for expiring contracts in order to have any chance to do anything.
I do think things are changing, though. Teams like the Heat managed to sign three big names. However, they did it because the players coordinated with each other to agree not to get paid the maximum they could command. In addition, the Heat blew up the entire team and the first year had barely anyone to go with the Big Three.