The hash of a zero-length message is defined for several reasons:
- There's no reason not to define it. If (as you assume) it'll never be used, then it doesn't matter whether it's defined and there's no reason to avoid defining it.
- Having it undefined would create a weird exceptional case that'd need to be handled by anything that uses the hash, just in case it ever happens. Weird exceptions tend to lead to bugs, bugs tend to cause vulnerabilities, and cryptographers hate vulnerabilities and the design choices that cause them.
- In practice, it will be used. One common use of hashes is to create a fingerprint of the contents of files, and empty (zero-length) files are entirely normal.
As for your point that for a given HASHing algorithm, the hash value of a zero length message is essentially pre-defined: that's true, but it's also true of any other specific message. The hash of "a" is essentially pre-defined, as is the hash of "foo", "This is a message", etc.