Yes this is something that can currently only be expressed with Callback protocols.
Eric once posted a nice overview here: PEP Idea: Extend spec of Callable to accept unpacked TypeDicts to specify keyword-only parameters - #24 by erictraut
If we ever get a nicer callable syntax, as suggested by PEP 677 or in PEP 677 with an easier-to-parse and more expressive syntax hopefully one would be able to express this “inline” without having to write a Callback Protocol every time.
FWIW I think lambda[T](arg: T) -> T would be a reasonable syntax. Once something like that is available, type checkers can probably deprecate the old behavior that conflicts with regular scoping rules. (or earlier with some transition period guiding users to use Callback Protocols instead)