We have a word that describes that better than 'final': release. And if it's on physical media, you could even call it GM (Golden Master). They are not words that stand on their own, you would combine it with the artifact name and the version you are releasing.
Release of the following:
Name: ansible
Version: 4.0.0
Combined, it's the "Ansible 4.0.0 Release" in whatever order makes sense. If you have something that is not a release, then you would not call it a release. But if you think you are close to a release and you want to be sure, you could state that this is a candidate but not entirely sure. You can even have multiple incarnations of candidates. You end up with a "release candidate" and you could suffix it with number if you have more than one.
While many creators and vendors some up with all sorts of schemes, there are a few standards available with extensive documentation like https://semver.org or simply mimic what well-respected projects are using.
The problem is of course that nobody agrees on anything if you have a large quantity of things (including large quantity of people), and the urge to create 'a standard to fix the mess' which just adds to the mess in the end. This whole thing is of course not all that important in the grand scheme of things, and an intersection of the 'standards' XKCD commic and 'everything is great and nobody is happy' seems to be where we end up every time.
I think the reason "final" is used is because you'll often have releases like
Foo 2.0 alpha release
Foo 2.0 RC1
Foo 2.0 RC2
etc, and if you just have "Foo 2.0" as a release it can be somewhat ambiguous as to whether someone named something wrong when downloading or describing it and left of that portion of the name, or if it's actually the full release, so they want a word to distinguish it as the actual full and final release of that version and not "the 2.0 branch"
"Final" may not be the best word choice for that, but it does at least accomplish the task of distinguishing the actual final product of that version from any other types of releases or the branch that will eventually become that.
Final has a finality to it as you somewhat pointed out ;-)
Perhaps, the best option would have been to omit any wording:
release 4.0.0 would be the real version
release 4.0.0-beta would be the beta version
release 4.0.0-rc1 would be the first release candidate
Then again, words like 'final' and 'release' have too many meanings. Release doesn't mean version or 'no longer secret' but mostly 'available for people that just want to use it'. It's probably (like GM) mostly originated from the times where software versions required distribution management with physical aspects which makes 'release' have more of a meaning.
beta would be 4.0.0b or 4.0.0-1 or 4.0.0-BETA. But context is important here; it's not called final because it's the final major 4 version but because this is the 'release' version of major version 4 according to the mailing list.
Release of the following:
Name: ansible
Version: 4.0.0
Combined, it's the "Ansible 4.0.0 Release" in whatever order makes sense. If you have something that is not a release, then you would not call it a release. But if you think you are close to a release and you want to be sure, you could state that this is a candidate but not entirely sure. You can even have multiple incarnations of candidates. You end up with a "release candidate" and you could suffix it with number if you have more than one.
While many creators and vendors some up with all sorts of schemes, there are a few standards available with extensive documentation like https://semver.org or simply mimic what well-respected projects are using.
The problem is of course that nobody agrees on anything if you have a large quantity of things (including large quantity of people), and the urge to create 'a standard to fix the mess' which just adds to the mess in the end. This whole thing is of course not all that important in the grand scheme of things, and an intersection of the 'standards' XKCD commic and 'everything is great and nobody is happy' seems to be where we end up every time.