Kasper,
I think your idea of having a second copy of the triangles is the correct solution here. Suppose for example we want to display two different Shapes based on the same .stl file with both being separately editable. Rather than keeping one list of Triangles for each, we can read the data into an object, perhaps called a TriangleSource, and provide an ImportedShape class which has a reference to it. Then we can control an object's display geometry by overloading ImportedShape's getTriangles() method to get a copy of the triangles from the TriangleSource, transform them in some way (such as by scaling), and return the result without having made any destructive edits to the imported data.
Also, the FXGeometryAttachment should be giving all objects an FXColorDecorator. You can get the render element for your shape using getRender(yourShape) on the attachment and then doing .setProperty("red", x) on the returned IRenderElement to set your shape's red value. "green" and "blue" work similarly.