Shrinking the array is another option, but I think that adds more work/risk than is needed. You could remove some data, shrink the array, create the initial array with the 4 TB disks, move some data over, and repeat the process. However, this is going to take a long time. Shrinking/growing arrays is not a fast process. Going from four to nine 2 TB disks on a LSI 8708EM2 took 88 hours.
I was also had the same mindset as you in regards to hardware and software RAID. When comparing software RAID (mdadm) to hardware RAID, I'd go with hardware every time. You get the added benefits of increased speed, added features that the card will give, it will be much easier to expand, and it will be faster. No questions there.
Speed is a bit different, though. If you access your share only through the network, do you really need it to be faster than a gigabit connection? Do you truly saturate your connection as it is?
---
However, ZFS is a totally different beast when it comes to software RAID and as with everything, there are upsides and downsides. The first is that it only runs on Linux, which is the most likely to scare people away. The second is that you don't expand the "pool" with individual drives, but rather "virtual devices" (sets of arrays is the best way to think of it). This means you have to plan ahead.
The features, though, outweigh the negatives by a substantial amount.
When you add a virtual device (vdev) to a "pool", it adds to the total storage of the pool. You want to add like-devices in the same vdev, but there is no problem or risk with running different disks in the same pool. This would allow you to run your 2 TB and 4 TB drives in the same pool, for example, and have one huge storage folder, seen as a single device. Your RAID card can't do that.
When writing to the array, ZFS creates checksums of files and checks them periodically to make sure they are valid; this is not the same as parity. It lets the filesystem know if there was silent corruption of data in the case that normal RAID will not catch it.
Snapshots are built into the file system and can be scheduled automatically. Compression is a feature that can (and should) be enabled.
Subpools can be created in the main pool, which can have different properties from the pool they belong. For example, you could create a "media" pool where you store movies and music that has compression and snapshots turned off.
There are many more features, but those are the only ones I can think off the top of my head.