You can use magit-reset (bound by default to x). The
commit at point will be used as the default for the prompt, but you
can enter any revision value you'd like ("HEAD~" here).
The resetting commands are described in the "Resetting" section of the
manual: https://magit.vc/manual/magit/Resetting.html
To reuse the commit message, you can use the =C option in the commit
popup. Unforuntately, the prompt doesn't currently offer any
completion values (I think it should probably at least offer
ORIG_HEAD), but before resetting you can put the hash of the current
commit in the kill ring (e.g., with C-w on the "Head:" line
of the status buffer) and then, after resetting, yank it as the value
for the =C option.
Some additional comments:
Instead of using =C, you may find it more convient to start off
the commit (cc) and then use git-commit-prev-message
(M-p) to cycle through previous messages.
If you are only modifying the last commit, you can tack on staged
changes to the previous commit with magit-commit-amend
(ca) or magit-commit-extend (ce). (The
latter reuses the commit message, bypassing the COMMIT_EDITMSG
buffer.)