You might find `jj` to help you there: all changesets have stable identifier and their content can be updated at any moment in-place.
TLDR; `jj edit <what_to_edit>; $EDITOR` will update a commit in the middle of the branch