I’m still wondering why would football teams do a fair catch if they could run to gain some yards. And, why would the NFL make that sort of rule? Is it because of some sort of safety reason?
Typically, a fair catch is called when no yards will be gained if a return was attempted, e.g., when a player of the kicking team is going to crush the returner the moment the ball touches him. It allows the receiving team to safely retain possession while saving the defenseless returner from taking a crushing hit from a player moving at full steam. So yes, there is a safety reason, as well as a practical one, as holding onto the ball after taking a hard hit isn’t a guarantee. If the returner fumbles the catch, the kicking team could potentially keep possession by recovering the ball.
As the receiving team, you forfeit your ability to better your field position by running after the catch when you call a fair catch, but you ensure that you at least retain possession. If the fair catch rule didn’t existing, receiving teams would often find themselves with very poor field position, as they’d likely elect to let the ball bounce to save their returner and ensure possession. This provides the kicking team the advantage of allowing the ball to continue to bounce and roll backwards until they touch it and the receiving team is given possession at that spot.