select from table of varchar2

Your code works:

DECLARE
  cust_data CUSTOM_DATA;
BEGIN
  cust_data:=CUSTOM_DATA('A','B','C');

  FOR i IN (SELECT COLUMN_VALUE as val FROM table(cust_data))
  LOOP
    DBMS_OUTPUT.put_line(i.val);
  END LOOP; 
END;
/

or:

DECLARE
  cust_data CUSTOM_DATA;
  cur       SYS_REFCURSOR;
  value     VARCHAR2(4000);
BEGIN
  cust_data:=CUSTOM_DATA('A','B','C');

  OPEN cur FOR
    SELECT COLUMN_VALUE as val FROM table(cust_data);

  LOOP
    FETCH cur INTO value;
    EXIT WHEN cur%NOTFOUND;
    DBMS_OUTPUT.put_line(value);
  END LOOP; 
END;
/

Which both output:

A
B
C

db<>fiddle here