This itched me a bit more, so I dove in to see if it can be hacked into git easily, and am sharing what I found: it absolutely can't.
This can be verified with GIT_TRACE_PACKET to see the exact protocol lines being exchanged:
# new tag without --force
$ git tag foo; GIT_TRACE_PACKET=1 git push --tags |& egrep -o 'push> .{5,}'
push> 0000000000000000000000000000000000000000 9edbf952c0cb944073b454b713e15f09e70f1aef refs/tags/foo\0 report-status side-band-64k quiet agent=git/2.8.3
# new tag with --force
$ git tag bar; GIT_TRACE_PACKET=1 git push --tags --force |& egrep -o 'push> .{5,}'
push> 0000000000000000000000000000000000000000 9edbf952c0cb944073b454b713e15f09e70f1aef refs/tags/bar\0 report-status side-band-64k quiet agent=git/2.8.3
As can be seen, there is no way to detect this kind of --force on the remote, which is what I was originally looking for.
# move remote tag without --force => no push was ever attempted by the client
$ git tag -fm "" foo >/dev/null; GIT_TRACE_PACKET=1 git push --tags |& egrep -o 'push> .{5,}'
# move remote tag with --force
$ git tag -fm "" foo >/dev/null; GIT_TRACE_PACKET=1 git push --tags --force |& egrep -o 'push> .{5,}'
push> 9edbf952c0cb944073b454b713e15f09e70f1aef d7c2313f0b67fe13ab57f632108e49c524559898 refs/tags/foo\0 report-status side-band-64k quiet agent=git/2.8.3