I don't suppose there's a way I can skip having LVM running in the guest and just lvextend on the host then resize2fs in the guest?
There's absolutely no requirement to use LVM inside a guest. You can just use the block device directly. Using LVM inside the guest gets you almost nothing (since you're already using LVM on the host to manage your space).
If by "KVM" you mean "libvirt", you can do use the
virsh blockresize command to get your guest to recognize the additional space once you've resized a block device. That is, if I have a guest with an attached LV:
</disk><disk type="block" device="disk">
<driver name="qemu" type="raw"/>
<target dev="vdb" bus="virtio"/>
foobar tank -wi-ao---- 4.00g
I can add space to the LV on the host:
# lvresize -L +2G /dev/tank/foobar
Tell libvirt to update the size:
# virsh blockresize myguest /dev/tank/foobar --size 0
And then inside the guest, resize the filestem:
guest# resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/vdb to 1572864 (4k) blocks.
The filesystem on /dev/vdb is now 1572864 (4k) blocks long.