fuse and loop can be auto-loaded on demand.
Searching shows that grsecurity kernels may block this. So there is some disagreement about how good an idea this is :-), but I believe it is used on most distributions.
If there is a temporary bug with auto-loading, it is still okay to load fuse and loop at boot time. It would not create a conflict with the auto-loading mechanism. Any module options should get set according to the options lines in /etc/modprobe.d/, no matter who calls modprobe.
E.g. to make sure loop gets loaded
echo 'loop' | sudo tee -a /etc/modules-load.d/modules.conf
How does the auto-loading work? To start with, userspace creates /dev/fuse statically at boot, regardless of whether the module is loaded. The mechanism on my current system is a little baroque - see /lib/systemd/system/kmod-static-nodes.service. So, you have a device node you can try to open. When you do, the kernel calls out to load the module first.
On my system, the list of device nodes which are created statically so you can trigger loading of the appropriate kernel module is
$ cat /run/tmpfiles.d/kmod.conf
c! /dev/fuse 0600 - - - 10:229
c! /dev/btrfs-control 0600 - - - 10:234
c! /dev/loop-control 0600 - - - 10:237
d /dev/net 0755 - - -
c! /dev/net/tun 0600 - - - 10:200
c! /dev/ppp 0600 - - - 108:0
c! /dev/uinput 0600 - - - 10:223
c! /dev/uhid 0600 - - - 10:239
d /dev/vfio 0755 - - -
c! /dev/vfio/vfio 0600 - - - 10:196
c! /dev/vhci 0600 - - - 10:137
c! /dev/vhost-net 0600 - - - 10:238
c! /dev/vhost-vsock 0600 - - - 10:241
d /dev/snd 0755 - - -
c! /dev/snd/timer 0600 - - - 116:33
d /dev/snd 0755 - - -
c! /dev/snd/seq 0600 - - - 116:1
c! /dev/cuse 0600 - - - 10:203
(The d lines are directories).