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