String.to_integer/1 why no exclamation mark?

That’s not quite correct. In the same conventions linked above we read:

There are also some non-paired functions, with no non-bang variant. The bang still signifies that it will raise an exception on failure. Example: Protocol.assert_protocol!/1.

To be clear, my question is nomenclatural, I’m not looking for workarounds.