XML::Simple doesn't store any information on the input data; whichever things don't map to a representation in the Perl data structure will not be present if you use the same structure to create XML from. Since XMLin produces an anonymous array or hash, it has no way of storing the root element's name, so the same structure fed to XMLout will be rendered with a default root element name of opt.
For the id/name confusion, check the XML::Simple docs for the KeyAttr option.
You may be interested in reading Does your XML::Simple code pass the strict test? as well.
Makeshifts last the longest.