Define a document template - this dictates the basic format and layout of the output (order)
(ideally, perhaps not worth it) Define the reference PO - to dictate message layout if present.

DB does this mean you would have a template for general layout and new comments, a reference PO so that we can update it with minimal changes and an update PO?
If there is no header, should one be added?

DB - in most cases no. The header is usually not there for a reason, although we could add headers by default if we can handle all cases of udpating. That way pogrep, pofilter, etc can make use of the header to feed that back into the final header when merged.
If we have a header, which entries should be updated from input: PO-Revision-Date, X-Editor, Last Translator, Team, Plural
overwrite translated (what if input is fuzzy) - depends on the case, pomerge usually means we have a reason to make something fuzzy so then yes we should overwrite and set fuzzy. In other cases we probably don’t want to update if its fuzzy. In the Pootle case we want to make that a suggestion.
overwrite fuzzy (what if input is fuzzy) - some applies to above
Who’s comments for what is used - programmer comments should come from the latest authority ie the template, transltor comments from input
Who is authority on locations - template has authority
Unused messages in input become obsolete? That might make sense as then all work is preserved.
Do we want fuzzy matching, with TM? - only in an update scenario not in a merging scenario
Should new messages be added - Yes from templates not from input
What to do with a clash (callback?) - clash? On Pootle we can make them suggestions