According to the protocol specification at the Bitcoin wiki, each message header includes the first 4 bytes of sha256(sha256(payload) as a packet checksum. I suppose this checksum is used for packet validation, but I do not see any benefit of this, as Bitcoin utilizes TCP which already has (as far as I know) full protection from lost and damaged packets. So... why this checksum? Is it to maintain compatibility for future UDP clients?
"Full protection" is a relative term. TCP packets include only a simple checksum, effectively just the sum of all the 16-bit words in the packet. See RFC 793 section 3.1. This is a fairly weak integrity protection mechanism. The Bitcoin designers may have felt the use of sha256 gave better protection. It may also, as you say, have been intended to provide forward compatibility for running Bitcoin over UDP or other protocols. It may even just have been paranoia.