Hallo Ralf,
du kannst die TargetReference direkt in das Formfield.set(...) werfen.
Also
formdatagcanewpage.get(null, "ps_speciallink“).set(targetReferenceNew);
Relevant ist hier nicht das ReferenceEditorValue (das ist quasi nur die "Kapsel" bzw. ein Tagging interface). Das (komplette) Beispiel in der Doku beruht hier tatsächlich auch noch auf dem "alten" Weg, über die "Editoren" zu gehen. Ich glaube aber, es ging Holger hier lediglich um den Weg (bzw. die eine Zeile), wie man sich eine TargetReference-Instanz erzeugt.
Allgemein (kleiner Exkurs zum Thema "Datentypen bei Eingabekomponenten")
Man kann in ein FormField (genau das bekommst du ja, wenn du xyz.getFormData().get(lang, name) aufrufst) immer mit .set(...) den Typ rein werfen, der im ODFS bei der entsprechenden Eingabekomponente (hier: FS_REFERENCE) oben in der grauen Box bei "zu den Methoden" steht.

Das ist sozusagen der "Eingebekomponenten-Inhalts-Datentyp". In einigen Fällen müssen dann auch noch weitere Voraussetzungen erfüllt sein (der Inhalt der Daten muss insbesondere "zur Konfiguration der Eingabekomponente passen" - man kann also z.B. in eine INPUT_COMBOBOX, die auf Datensätzen basiert keine Option werfen, die auf festen Werten basiert.
Es gibt dann noch einige "Spezialfälle", wo man sogar noch andere Typen benutzen kann, die dann automatisch passend "umgewandelt" werden. Zwar nicht im Fall einer FS_REFERENCE, aber z.B. bei den sog. "Option-basierten" EKs (INPUT_COMBOBOX, INPUT_LIST, INPUT_CHECKBOX, INPUT_RADIOBUTTON). Dort muss man nicht zwingend eine Option benutzen (auch weil es da keinen "schönen" Weg gibt, die zu erzeugen), sondern kann den Typ nutzen, auf dem wiederum die "Option" basieren würde. Das hängt dann vom benutzten INCLUDE_TYPE ab. Ist der z.B. "database", darf man auch ein Dataset oder eine Entity benutzen (bzw. bei den mehrwertigen dann ein Set<Dataset> oder Set<Entity>).
Das ist übrigens auch der Grund, warum in der API zum FormField-Interface (das eben genau mit dem "Inhalts-Datentyp" (T) typisiert ist), zwar beim .get() ein T zurück geliefert wird (in deinem Fall eine TargetReference), die .set(...)-Methode aber nicht auf einem T "besteht" sondern ein Object bekommen kann.
Ich hoffe, das macht es etwas klarer.
Viele Grüße
Michael