With the same code built under C-turtle, the Vector3Stamped header.seq
fields are always zero. Note that the seq field within the 'toplevel'
header field *does* increment as before, and as before this field is
also not touched explicitly by my code.

This was a bug in the boxturtle roscpp message generator.  Only the top-level header was ever supposed to get automatically populated.
 
Also, when seq does get incremented
automatically, how does this happen? When the message is published?

Yes.  If you're using your own message I would recommend not using the seq field at all, and instead populating your own field.

Josh