How to concatenate arrays with user-defined types in pgsql?
array_append() works just fine if you use the correct syntax. Your fiddle doesn't work because you used “ instead of " and ‘ instead of '. The language for a function is an identifier and shouldn't be quoted to begin with. 

String constants need to be enclosed in single quotes, not double quotes. The expression ROW("a","b")::udt would result in " column "a" does not exist" because "a" is an identifier. You need to use ROW('a','b')::udt to initialize a value of type udt

So the correct function would be: 

CREATE OR REPLACE FUNCTION abc() RETURNS text AS $BODY$
DECLARE
  x udt;
  y udt[];
BEGIN
  x := ROW('a','b')::udt;
  return array_append(y,x);
END
$BODY$ LANGUAGE plpgsql
VOLATILE;


And select abc() returns:

abc      
---------
{"(a,b)"}


Working fiddle