Last time I looked I found git-filter-branch, but not reposurgeon, thanks! It has a couple of comands I'd need, that I couldn't quite figure out how to do properly with git-filter-branch. An effectively fresh repo, with fresh hashes, isn't a problem as long as history, branches and tags are present and dated correctly.
No matter what though, it's a big and tedious task, even just to check that the alterations/removals have been made 100% correctly, and don't remain lurking somewhere. It might be simpler to just manually create a fresh repo and push (possibly modified) snapshots of 1.0, 1.01, ... 1.11, 1.12 into it, plus branches that haven't merged back in yet. The dates would be wrong, but it would be *something*!