Eu encontrei uma solução: um programa chamado kpartx, que é um programa de espaço do usuário que usa o devmapper para criar partições a partir de dispositivos de loopback, o que funciona muito bem:
$ loop_device='losetup --show -f /dev/sdg'
$ kpartx -a $loop_device
$ ls /dev/mapper
total 0
crw------- 1 root root 10, 236 Mar 2 17:59 control
brw-rw---- 1 root disk 252, 0 Mar 2 18:30 loop0p1
brw-rw---- 1 root disk 252, 1 Mar 2 18:30 loop0p2
$
$ # delete device
$ kpartx -d $loop_device
$ losetup -d $loop_device
Isso essencialmente faz o que eu planejava fazer na opção 1, mas muito mais claramente.