One solution is to create a sub-volume just for the data you DON'T want backed up and then move-and-symlink the directories

For example, assuming all the files & directories you want to exclude (except for /swapfile) are in your home directory, which is either a sub-volume itself or part of a sub-volume for all of /home:

    cd /
    sudo btrfs subvolume create caches
    sudo mkdir /caches/rainer /caches/root

    # swapfile, presumably owned by root
    sudo swapoff /swapfile
    sudo mv /swapfile /caches/root/
    sudo ln -s /caches/root/swapfile /
    sudo swapon /swapfile
    # BTW, instead of symlinking, a better alternative for this
    # file would be to edit /etc/fstab to use the new location
    # of the swapfile.

    sudo chown youruser:yourgroup /caches/rainer
    cd ~/

    # Before proceeding you should stop all processes
    # that have open files in the directories to be moved,
    # e.g. web browsers, file viewers (such as epub or pdf), and 
    # anything else that uses the cache director{y,ies} and is
    # currently running.

    for d in .cache/ cache/ [Tt]rash/; do
      mv "$d" /caches/rainer/
      ln -s "/caches/rainer/$d/" ./
    done

    # you can restart your stopped processes now

NOTE: you may run into a problem with [Tt]rash/, depending on the file browser you use and how it deals with the trash dir being a symlink rather
than a directory.  If that happens see if you can configure your file browser to use /caches/rainer/trash (but that might not be possible because most will use one hard-coded trash dir per filesystem).

In fact, it wouldn't hurt to do similar for all programs that use ~/.cache and ~/cache - move-and-symlink is a time-tested method that works and has worked for decades, but that's no reason to assume that software devs won't do stupid and lazy things when they get the chance.