I ran into this problem too because the tool we use to verify function signatures in typeshed relies on inspect.signature, which fails on these “<unrepresentable>” defaults. I proposed a hacky solution, but it would be better if the inspect module supported these signatures directly.
I would favor Nikita’s suggested solution of adding a marker like inspect.unrepresentable (I’d vote for exposing it as inspect.Parameter.unrepresentable, similar to .empty). @storchaka objects that this might break tools that assume something like iter(object, inspect.unrepresentable) would work. But it’s not unexpected for such tools that inspect signatures to have to adapt to new features in new Python versions (e.g., positional-only parameters). I help maintain several tools that rely on inspect.signature, and I’d much prefer if they could support unrepresentable defaults, even if that means I have to make some changes to support Python 3.13.
There is an alternative suggestion to support “multi-signatures”. That would be a good solution for some functions like iter, but for other cases like bytes.hex, I don’t think that solution is more elegant. It also adds significantly more complexity.