After a lot of trial and error, I got it. I did not know that ListView column headers inherited from Component. It seems that this is a requirement because they have to be added to the logical container to be persisted:
this.Component.Site.Container.Add(header);
After they are added to the container, they appear serialized in the form's designer file.
MCP