While software source code will definitely tell you the differences made between versions, it is vastly different from what the complied output in machine code looks like.
Complied software results in binary code, which is much less efficient to track the differences between two versions. The result is typically more data is needed to express all of the tiny differences in bytes than any benefit ever gained.
What you might not recognize though, is that many applications have external dependencies often (called libraries) which may, or may not, also get updated when you update the main program. In this way, developers are lessening the amount you must download every time already (even though it's not typically the primary reason to do so, rather an added bonus)