The problem is, is that git will happily destroy history. git blame is not useful because it doesn't tell you who authored the line of code.
No, people will happily destroy history. Git is just a tool.
In extremis, Fossil offers the "shun" command to remove improperly-committed artifacts, but even then it's subject to a lot of restrictions. (https://fossil-scm.org/fossil/doc/trunk/www/shunning.wiki)
Tools don't have opinions, people do. Fossil is just inflexible.
You don't want to alter history? Don't do it then. Git supports not altering history just fine.
Tools being more flexible is strictly a good thing. If they are misused, the person that misused them is responsible. It is that simple.