According to the Protocol Specification, the txn_count field of a Block Header is always set to 0, why is that? What are the intended future uses of this field?
The headers message is sent in response to a getheaders message.
The txn_count is always 0 simply to make the parsing of this packet compatible with the parsing of the block message.
getheaders is designed to be used by a simplified client, however since there is no way to get partial merkle branches using the standard protocol this cannot actually be done.