TCP port 0 has a special meaning inspecial meaning in many socket APIs (especially in the common Berkeley socket API that the POSIX oneAPI grew out of), for requesting. It requests an ephemeral/dynamic port from the stack. Probably for that reason IANA has reserved that port, so that it is not used in general.
Within the actual stack, port 0 has no special meaning (nor does any other number have). Due to its API use it might be (very) hard to put it into actual use though. And simply, there's no point to try.
Note that ports are only used with some transport-layer protocols. ICMP (which actually belongs to the network layer although it is encapsulated like an L4 protocol) doesn't use ports.