Online expansion has pros and cons. ZFS was designed as an enterprise system, buying a pile of disks isn't an issue there. Note that there is a maximum number of drives you should consider per raidz set as well. I personally wouldn't go above about 10 for a raidz2.
You don't need to add the same number of drives per vdev. You can have a pool with a 6-disk raidz2 and a 8-disk raidz2. No problem. Best practice is to keep them the same, mostly for admin sanity.
With a raidz pool, you have 2 options to increase capacity later. You can add another vdev, yes, each vdev uses independent parity so you lose that space to redundancy for each vdev. I don't personally consider it "lost", it's being used, but that's just perspective. You can also replace individual drives in the array one or two at a time, waiting for the resliver between each. Once you get them all replaced, the array will auto-expand. Last time I did this, each disk took about 14 hours to resliver. Performance tanked, but user stuff does get I/O priority, which helps some. Reslivering a mirror of the same size took about an hour.
Compression is nice. It uses a bit more CPU to decompress it, but unless it's for things like photos and videos that are already compressed or just don't do well with standard compression systems, it's worth having. Even pretty old cheap CPUs can process compression so fast that you don't notice it unless you are CPU starved for some reason. What you want to avoid unless you have a really good reason is dedupe. It needs a ton of memory and only helps if you have a lot of identical blocks.
For backup, there are lots of options. rsync isn't bad, but if you want complete copies, consider ZFS send/receive (both sides have to be ZFS though). It will copy snapshots at the block level. After the first one, they are differential so they are quite fast. I already have Crashplan running for client backups, so I just have the backup server run it as well and set machines to backup to both, with the server also set to backup to the backup box. I don't backup the full set, just the important stuff. So my backup server runs a ZFS mirror as well, only about 4TB of space total, but I'm using about 1TB of it, so it's fine.
My only concern using mdadm for backup storage would be that I would want some way to verify the backup without having to restore the thing. I do that with ZFS scrubs and Crashplan has a similar setup. I've had data die from bit-rot, so I'm a little paranoid about that. So long as you have a good way to test the backup data to ensure it's correct, you should be good. rsync is pretty good there as it compares checksums to decide what to send, so it will cover that for you. And if you use something like Crashplan you have to run a restore once in a while to make sure it works. A backup that you can't restore, isn't.