I think people (managers) have become scared of firing and so try to avoid all risk. Having had to do it is never fun, but it becomes easier the more you do. The first time I had to fire someone I tried everything I could to avoid it and made the situation worse by dragging out the whole process.
The other reason is the company is not really looking to hire, just placate their current employees - "yes we know you are over worked, just hang in there while we hire someone to take off the load".
>"yes we know you are over worked, just hang in there while we hire someone to take off the load"
Which may be why people that are below par haven't been let go? A need to throw bodies at a problem rather than step back and give it some thought / work it out.
Yes it is certainly true that it hard to fire anyone when you are pretending to be looking to expand - nothing breaks the spell that all the hard work is just a consequence of not being able to hire like firing a member of the team.
The other reason is the company is not really looking to hire, just placate their current employees - "yes we know you are over worked, just hang in there while we hire someone to take off the load".