Snap! file format spec?

Your understanding seems correct. <hidden> stores hidden primitives (you can do that by right-clicking blocks in the palette), and I believe <headers> and <code> are related to codification, and since Scratch doesn't have those you can safely ignore them.

The definitive source on the Snap! file format is store.js in the source code: Snap/src/store.js at master · jmoenig/Snap · GitHub

You may also find the Snapinator source code useful since it does what you want to, but in reverse: GitHub - djsrv/snapinator: Scratch 1.x-3.0 -> Snap! converter