I use substitute words like "crap" instead of "shit" and "freakin'" instead of "fuckin'" for a couple of reasons. One is because to me, they really aren't quite synonyms. I use profanity when there's real emotion behind it, or to denote a more extreme situation. If I come home and see that one of my kids has unwrapped a new toy but left the box and other packing garbage on the floor, I might ask my wife who left that crap on the floor. It's not the end of the world, but it definitely shouldn't be there. If there's literally piles of stuff that you'd really have to be an idiot to not realize that it should be cleaned up, now I'm pissed. Who left all this shit here? What the fuck? Once the guilty party has been summoned to the room, I'll ask them to clean that crap up. No point in swearing in front of the kids.
Which leads to the other reason. There is such a thing as inappropriate words for a given situation. I know some folks my age or younger have no problem swearing in front of their kids, or at their kids. One day their kid is gonna get kicked out of class for swearing at their teacher, maybe not even out of disrespect, but because they've been taught that they're "just words" and honestly had no idea that it was inappropriate. Why? Because of the example set at home by their parents. Yes, it's important to teach kids that adults can and do get away with things that kids can't, and why, but that only comes after they've been taught the right way first. Swear at your kids all the time, and you'll raise kids that swear. Good luck with that.
And there are people who are offended by cursing. Regardless of my personal stance on using profanity, I tone it down and use those "substitute words" in their presence. Why annoy or offend someone, when it's just as easy to shift to a different vocabulary? It's all about what's appropriate for the situation.