I see no reason (in this case) to separate system metadata and user metadata.
What we want to do in this case is let TextureLoader to associate some information with scenegraph node, just to be able to distinguish resources loaded by TextureLoader and resources, loaded another way. But TextureLoader is just one of subsystems, even potentially optional one - just as any other geometry, sound and image loader, while the scenegraph is a core part. Similar way, Physics engine connector may be a subsystem of an application, but this does not make its metadata a system metadata.
I understand the need of associating metadata with scenegraph nodes, and I think keeping metadata in common storage is a good idea.
Few examples:
JAR file manifest: Main-Class attribute is one of JAR file metaattributes, and completely equivalent to any user metaatributes associated with JAR file, besides of it can be produced by “system” component JAR utility.
Java class files: Class files may hold custom named attributes for almost every entity (method, field, etc.), and debugging information is just one of them, besides of it is typically produced by “system” component java compiler (OK, there was no direct way to associate custom attributes in Java prior to 1.5, there will be @interface [metadata] mechanism for that).
Yuri

