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.)