In Oracle 12c, is there an alternative to CREATE TYPE when I only have read-only privileges?
There is built-in type called SYS.ODCINUMBERLIST which is a VARRAY(32767) of NUMBER, and EXECUTE privilege is granted on it to everyone (PUBLIC). You can use that for up to 32767 numbers, example:

with function f1 (p_numbers SYS.ODCINUMBERLIST) return number
as
begin
 return p_numbers.count;
end;
select f1(SYS.ODCINUMBERLIST(1,2,3,4,5,6,7)) from dual;
/

F1(SYS.ODCINUMBERLIST(1,2,3,4,5,6,7))
-------------------------------------
                                    7


In 19c, there is another built-in type called SYS.FI_NUMERICALS which is a TABLE of NUMBER, also usable by anyone in a similar way.

with function f1 (p_numbers SYS.FI_NUMERICALS) return number
as
begin
 return p_numbers.count;
end;
select f1(SYS.FI_NUMERICALS(1,2,3,4,5,6,7)) from dual;
/

F1(SYS.FI_NUMERICALS(1,2,3,4,5,6,7))
------------------------------------
                                   7


I have not found any documentation or reference for the latter.