Here's our use case:
We have multiple jobs for feature branches. Often somebody wants to push their changes to have them built by Jenkins, but not yet merged/pushed to team/release branch. Instead of removing the push configuration from the job (and having to add it again afterwards, very error prone), we separate the job in 2 jobs: 1 build job and 1 push job. The developers can then disable/enable the push job at will.
The build job merges with bugfix/current-release/next-release branches, and pushes that merge commit (after a successful build) to a temporary branch <jenkins/feature-branch>. The push job then pushes that to the next-release branch. If that merge commit doesn't make it to next-release branch (push job was disabled, or someone else pushed to next-release branch first), that merge commit is essentially useless. The next run the build job creates a new merge commit, but can't push to <jenkins/feature-branch> because the new merge commit is non-fast-forward to the old commit. We need a force push to overwrite the old commit on the temporary branch
Force push from a Jenkins job seems like a very dangerous option.
Can you describe further why you want a Jenkins job to be able to delete history from a repository?
The Jenkins plugin can merge, and can push that merge result, so long as no intervening commit has been pushed to the destination branch in the central repository. If an intervening commit has been pushed to the destination branch, then the Jenkins job is not allowed to push the merge result because it would overwrite the intervening commit with that forced push.