Alright, I wrote my own autokeep method, which seems to work in both cases:
Run 1 (note how ‘phonon4qt5’ comes first, which will select the VLC backend):
$ snapcraft clean && snapcraft -d pull && ls parts/my-part/ubuntu/download/*vlc*
Cleaning up priming area
Cleaning up staging area
Cleaning up parts directory
Starting snapcraft 2.42 from /home/kyrofa/src/snapcraft/snapcraft/cli.
Setting up part 'my-part' with plugin 'nil' and properties {'plugin': 'nil', 'stage-packages': ['phonon4qt5', 'phonon4qt5-backend-null'], 'stage': [], 'prime': []}.
Preparing to pull my-part
Fetching stage-packages {'phonon4qt5', 'phonon4qt5-backend-null'}
snapcraft is running as a snap False, SNAP_NAME set to ''
Hit http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit http://ppa.launchpad.net/nextcloud-devs/client/ubuntu bionic InRelease
Hit http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
Fetched 0 B in 0s (0 B/s)
Marking 'phonon4qt5' (and its dependencies) to be fetched
Marking 'phonon4qt5-backend-null' (and its dependencies) to be fetched
Skipping blacklisted from manifest packages: ['adduser', 'apt', 'apt-utils', 'base-files', 'base-passwd', 'bash', 'bsdutils', 'coreutils', 'dash', 'debconf', 'debconf-i18n', 'debianutils', 'diffutils', 'dmsetup', 'dpkg', 'e2fslibs', 'e2fsprogs', 'file', 'findutils', 'gcc-5-base', 'gnupg', 'gpgv', 'grep', 'gzip', 'hostname', 'init', 'libacl1', 'libapparmor1', 'libattr1', 'libaudit-common', 'libaudit1', 'libblkid1', 'libbz2-1.0', 'libc-bin', 'libc6', 'libcap2', 'libcap2-bin', 'libcomerr2', 'libdb5.3', 'libdebconfclient0', 'libdevmapper1.02.1', 'libgcc1', 'libgcrypt20', 'libgpg-error0', 'libgpm2', 'libkmod2', 'liblocale-gettext-perl', 'liblzma5', 'libmagic1', 'libmount1', 'libncurses5', 'libncursesw5', 'libpam-modules', 'libpam-modules-bin', 'libpam-runtime', 'libpam0g', 'libpcre3', 'libselinux1', 'libsemanage-common', 'libsemanage1', 'libsepol1', 'libslang2', 'libsmartcols1', 'libss2', 'libstdc++6', 'libsystemd0', 'libtext-charwidth-perl', 'libtext-iconv-perl', 'libtext-wrapi18n-perl', 'libtinfo5', 'libudev1', 'libusb-0.1-4', 'libustr-1.0-1', 'libuuid1', 'locales', 'login', 'lsb-base', 'makedev', 'manpages', 'manpages-dev', 'mawk', 'mount', 'multiarch-support', 'ncurses-base', 'ncurses-bin', 'passwd', 'perl-base', 'procps', 'readline-common', 'sed', 'sensible-utils', 'systemd', 'systemd-sysv', 'sysvinit-utils', 'tar', 'tzdata', 'ubuntu-keyring', 'udev', 'util-linux', 'zlib1g']
::::::::::: MARKING libx265-146 KEEP
::::::::::: MARKING libdc1394-22 KEEP
::::::::::: MARKING libssh2-1 KEEP
::::::::::: MARKING libcroco3 KEEP
::::::::::: MARKING libwebp6 KEEP
::::::::::: MARKING vlc-plugin-video-output KEEP
::::::::::: MARKING libusb-1.0-0 KEEP
::::::::::: MARKING libkrb5-3 KEEP
::::::::::: MARKING libavformat57 KEEP
::::::::::: MARKING libgssapi-krb5-2 KEEP
::::::::::: MARKING libsnappy1v5 KEEP
::::::::::: MARKING libopenjp2-7 KEEP
::::::::::: MARKING libpangoft2-1.0-0 KEEP
::::::::::: MARKING libplacebo4 KEEP
::::::::::: MARKING libaa1 KEEP
::::::::::: MARKING libraw1394-11 KEEP
::::::::::: MARKING libcom-err2 KEEP
::::::::::: MARKING libvulkan1 KEEP
::::::::::: MARKING libchromaprint1 KEEP
::::::::::: MARKING libgroupsock8 KEEP
::::::::::: MARKING libmtp9 KEEP
::::::::::: MARKING libcrystalhd3 KEEP
::::::::::: MARKING libgdk-pixbuf2.0-0 KEEP
::::::::::: MARKING libupnp6 KEEP
::::::::::: MARKING libsndio6.1 KEEP
::::::::::: MARKING libswresample2 KEEP
::::::::::: MARKING libshout3 KEEP
::::::::::: MARKING libpixman-1-0 KEEP
::::::::::: MARKING libasound2-data KEEP
::::::::::: MARKING gcc-8-base KEEP
::::::::::: MARKING libsecret-1-0 KEEP
::::::::::: MARKING libxrender1 KEEP
::::::::::: MARKING libebml4v5 KEEP
::::::::::: MARKING libopenmpt0 KEEP
::::::::::: MARKING libarchive13 KEEP
::::::::::: MARKING libdvdread4 KEEP
::::::::::: MARKING libavahi-common-data KEEP
::::::::::: MARKING libgmp10 KEEP
::::::::::: MARKING libavahi-common3 KEEP
::::::::::: MARKING libvdpau1 KEEP
::::::::::: MARKING libmp3lame0 KEEP
::::::::::: MARKING liba52-0.7.4 KEEP
::::::::::: MARKING libnuma1 KEEP
::::::::::: MARKING libdca0 KEEP
::::::::::: MARKING libvlc5 KEEP
::::::::::: MARKING libk5crypto3 KEEP
::::::::::: MARKING libvorbisfile3 KEEP
::::::::::: MARKING libsecret-common KEEP
::::::::::: MARKING libgles2 KEEP
::::::::::: MARKING libwavpack1 KEEP
::::::::::: MARKING libopus0 KEEP
::::::::::: MARKING libpostproc54 KEEP
::::::::::: MARKING libvlccore9 KEEP
::::::::::: MARKING libvpx5 KEEP
::::::::::: MARKING libdvdnav4 KEEP
::::::::::: MARKING libtiff5 KEEP
::::::::::: MARKING libva2 KEEP
::::::::::: MARKING libx264-152 KEEP
::::::::::: MARKING libpangocairo-1.0-0 KEEP
::::::::::: MARKING libopenmpt-modplug1 KEEP
::::::::::: MARKING libass9 KEEP
::::::::::: MARKING libmpg123-0 KEEP
::::::::::: MARKING libxvidcore4 KEEP
::::::::::: MARKING libcaca0 KEEP
::::::::::: MARKING libprotobuf-lite10 KEEP
::::::::::: MARKING librsvg2-2 KEEP
::::::::::: MARKING libkrb5support0 KEEP
::::::::::: MARKING libzvbi0 KEEP
::::::::::: MARKING libdvbpsi10 KEEP
::::::::::: MARKING libtag1v5 KEEP
::::::::::: MARKING libresid-builder0c2a KEEP
::::::::::: MARKING libspeex1 KEEP
::::::::::: MARKING libwayland-egl1-mesa KEEP
::::::::::: MARKING libbasicusageenvironment1 KEEP
::::::::::: MARKING libavcodec57 KEEP
::::::::::: MARKING libkeyutils1 KEEP
::::::::::: MARKING libxcb-xv0 KEEP
::::::::::: MARKING liblz4-1 KEEP
::::::::::: MARKING libavutil55 KEEP
::::::::::: MARKING vlc-data KEEP
::::::::::: MARKING libtheora0 KEEP
::::::::::: MARKING liblua5.2-0 KEEP
::::::::::: MARKING libsidplay2 KEEP
::::::::::: MARKING libmatroska6v5 KEEP
::::::::::: MARKING libgomp1 KEEP
::::::::::: MARKING libsdl1.2debian KEEP
::::::::::: MARKING libgme0 KEEP
::::::::::: MARKING libssh-gcrypt-4 KEEP
::::::::::: MARKING libmad0 KEEP
::::::::::: MARKING libsoxr0 KEEP
::::::::::: MARKING libwebpmux3 KEEP
::::::::::: MARKING libhogweed4 KEEP
::::::::::: MARKING libcddb2 KEEP
::::::::::: MARKING libswscale4 KEEP
::::::::::: MARKING libgdk-pixbuf2.0-common KEEP
::::::::::: MARKING libspeexdsp1 KEEP
::::::::::: MARKING libmpeg2-4 KEEP
::::::::::: MARKING libnfs11 KEEP
::::::::::: MARKING libasound2 KEEP
::::::::::: MARKING libnettle6 KEEP
::::::::::: MARKING libmpcdec6 KEEP
::::::::::: MARKING libshine3 KEEP
::::::::::: MARKING libjbig0 KEEP
::::::::::: MARKING libkate1 KEEP
::::::::::: MARKING libidn11 KEEP
::::::::::: MARKING libgnutls30 KEEP
::::::::::: MARKING libtwolame0 KEEP
::::::::::: MARKING libgsm1 KEEP
::::::::::: MARKING libva-x11-2 KEEP
::::::::::: MARKING libva-wayland2 KEEP
::::::::::: MARKING libunistring2 KEEP
::::::::::: MARKING liblivemedia62 KEEP
::::::::::: MARKING libp11-kit0 KEEP
::::::::::: MARKING libzstd1 KEEP
::::::::::: MARKING libva-drm2 KEEP
::::::::::: MARKING libsdl-image1.2 KEEP
::::::::::: MARKING libtasn1-6 KEEP
::::::::::: MARKING libtag1v5-vanilla KEEP
::::::::::: MARKING vlc-plugin-base KEEP
::::::::::: MARKING libcairo2 KEEP
::::::::::: MARKING libavc1394-0 KEEP
::::::::::: MARKING libavahi-client3 KEEP
::::::::::: MARKING libzvbi-common KEEP
::::::::::: MARKING libpango-1.0-0 KEEP
::::::::::: MARKING liblirc-client0 KEEP
::::::::::: MARKING libsamplerate0 KEEP
::::::::::: MARKING libmicrodns0 KEEP
::::::::::: MARKING libidn2-0 KEEP
::::::::::: MARKING libmtp-common KEEP
::::::::::: MARKING libbluray2 KEEP
::::::::::: MARKING libfaad2 KEEP
::::::::::: MARKING libusageenvironment3 KEEP
::::::::::: MARKING libaribb24-0 KEEP
::::::::::: MARKING libfribidi0 KEEP
::::::::::: MARKING liblzo2-2 KEEP
<snip>
Running on 'bionic'
Pulling my-part
ls: cannot access 'parts/my-part/ubuntu/download/*vlc*': No such file or directory
Run 2 (note how ‘phonon4qt5-backend-null’ comes first this time, so the VLC backend is not pulled):
(snapcraft) kyrofa@protege:/tmp/foo$ snapcraft clean && snapcraft -d pull && ls parts/my-part/ubuntu/download/*vlc*
Cleaning up priming area
Cleaning up staging area
Cleaning up parts directory
Starting snapcraft 2.42 from /home/kyrofa/src/snapcraft/snapcraft/cli.
Setting up part 'my-part' with plugin 'nil' and properties {'plugin': 'nil', 'stage-packages': ['phonon4qt5', 'phonon4qt5-backend-null'], 'stage': [], 'prime': []}.
Preparing to pull my-part
Fetching stage-packages {'phonon4qt5-backend-null', 'phonon4qt5'}
snapcraft is running as a snap False, SNAP_NAME set to ''
Hit http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit http://ppa.launchpad.net/nextcloud-devs/client/ubuntu bionic InRelease
Hit http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
Fetched 0 B in 0s (0 B/s)
Marking 'phonon4qt5-backend-null' (and its dependencies) to be fetched
Marking 'phonon4qt5' (and its dependencies) to be fetched
Skipping blacklisted from manifest packages: ['adduser', 'apt', 'apt-utils', 'base-files', 'base-passwd', 'bash', 'bsdutils', 'coreutils', 'dash', 'debconf', 'debconf-i18n', 'debianutils', 'diffutils', 'dmsetup', 'dpkg', 'e2fslibs', 'e2fsprogs', 'file', 'findutils', 'gcc-5-base', 'gnupg', 'gpgv', 'grep', 'gzip', 'hostname', 'init', 'libacl1', 'libapparmor1', 'libattr1', 'libaudit-common', 'libaudit1', 'libblkid1', 'libbz2-1.0', 'libc-bin', 'libc6', 'libcap2', 'libcap2-bin', 'libcomerr2', 'libdb5.3', 'libdebconfclient0', 'libdevmapper1.02.1', 'libgcc1', 'libgcrypt20', 'libgpg-error0', 'libgpm2', 'libkmod2', 'liblocale-gettext-perl', 'liblzma5', 'libmagic1', 'libmount1', 'libncurses5', 'libncursesw5', 'libpam-modules', 'libpam-modules-bin', 'libpam-runtime', 'libpam0g', 'libpcre3', 'libselinux1', 'libsemanage-common', 'libsemanage1', 'libsepol1', 'libslang2', 'libsmartcols1', 'libss2', 'libstdc++6', 'libsystemd0', 'libtext-charwidth-perl', 'libtext-iconv-perl', 'libtext-wrapi18n-perl', 'libtinfo5', 'libudev1', 'libusb-0.1-4', 'libustr-1.0-1', 'libuuid1', 'locales', 'login', 'lsb-base', 'makedev', 'manpages', 'manpages-dev', 'mawk', 'mount', 'multiarch-support', 'ncurses-base', 'ncurses-bin', 'passwd', 'perl-base', 'procps', 'readline-common', 'sed', 'sensible-utils', 'systemd', 'systemd-sysv', 'sysvinit-utils', 'tar', 'tzdata', 'ubuntu-keyring', 'udev', 'util-linux', 'zlib1g']
::::::::::: MARKING gcc-8-base KEEP
::::::::::: MARKING liblz4-1 KEEP
::::::::::: MARKING libzstd1 KEEP
<snip>
Running on 'bionic'
Pulling my-part
ls: cannot access 'parts/my-part/ubuntu/download/*vlc*': No such file or directory
I suspect this will result in general space saving overall, since we unmark some packages by default, but don’t autoremove their dependents.