This is true, but there is a difference between a routine with a static lifetime versus an automatic lifetime. You should only be using routines with automatic lifetimes. There is no call stack for a routine with a static lifetime See
this link.
The reason for this restriction is that Verilog allows you to access the arguments of a routine with a static lifetime from outside that routine, just like any other static variable. If you try to access that argument before the routine is called, the argument would have a bad reference. You would have the same problem if you tried to access the argument after the routine was called and the actual argument from the last call had disappeared.
I suppose SystemVerilog could have made another rule that did not allow you to access ref arguments of a routine with a static lifetime, but I think everyone wants people to stop using routines with static lifetimes.