"Sparse" files are files with empty gaps presumed to be filled with zeroes, but for which that assumption is enough to go on. That is, If you read the file, you'll get zeroes, but since we know it's zeros, we don't actually have to write out 8GB worth of zeroes. It's enough to say, "let's just agree that there's a big file here without actually allocating space for it".
As you overwrite the blank contents of the file, blocks are allocated on disk to accommodate what you're storing (since you can no longer assume it's just zeroes). But if you append to the file, you're not overwriting anything. You're just adding more to the end. So by appending you allocate blocks on disk, but those blocks don't take the place of your existing "imaginary" blocks; instead the ones you create are added to the end, after the imaginary ones.
You can even add more imaginary blocks using a similar dd -skip
operation like you used to create the file. The "imaginary" blocks needn't be all together. And in fact as you overwrite existing blocks within the file, only the blocks you overwrite will be allocated, no matter where they appear in the file. That is to say, writing a block at position 101 won't automatically allocate and zero-fill blocks 1 through 99.