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