What is the purpose of UVVM's t_void type?
I think it's just used to enhance the readability of the code from the user perspective. For instance, if void argument is not there in the procedure, you would invoke the procedure in codes as:
whatever ;

As a user seeing this statement, it NEVER gives assurance to you that this procedure doesn't take in any arguments. You would then have to look up at the package and trace the procedure definition to confirm what are the arguments. It may well be taking an argument and using it inside, which is defaulted in the procedure, like:
procedure whatever (variable temp : in std_logic := '0') is
begin
   ...
end procedure ;

It is still fine to invoke the above procedure as:
  whatever        ;    --  no/implicit argument
  whatever (flag) ;    -- 'flag' is a variable (explicit argument)

By using VOID argument in the procedure whatever, and invoking it as whatever (VOID),
it is being made clear to the user that whatever is a procedure that NEVER takes in any argument, default or explicit.
We have similar concept in C language standards as well.