Having an abstract representation of an image file is indeed useful but I still think that the jpeg_metadata_parser.js should only know about the jpeg / exif structure of a file. It just identifies the file sections, read the tags the pixels and returns them untouched. I can see parsers for other formats in the future: exifParser.js, tiffParser.js,  pngParser.js,  fitsParser.js... The API would look like this:

var callback = function(metaData, pixelData) {};
// metaData is just an object with all the meta data fields untouched

XXXParser.readFile(path/to/file, callback);
XXXParser.writeFile(path/to/file, metaData, pixelData, callback);

// Something more abstract that interprets meta data would look like this
callback = function(metaData, pixelData, originalMetaData) {};

// Under the hood this abstract image is going to find the magic word in the file to determine the image format and use the appropriate // parser. It also going to transform the meta data to a more abstract format e.g: orientation = XXX degrees.
Image.readFile(path/to/file, callback); 
Image.writeFile(path/to/file, metaData, pixelData, callback);

If performance is a concern these APIs might be implemented on the gecko side.