At the GRUB prompt, interrupt the boot process and edit the command line. Add systemd.unit=rescue.target and then continue booting. This will hopefully get you to a point where you can inspect the system and manually start systemd targets. Depending on what exactly failed, this could take a bit of effort to sort out.
If this approach still doesn't help, break=bottom would give you another useful entry point into the boot process. When you start this way, you will find yourself in the initramfs, and you can access your root filesystem that is attached to /root. You can try to run fsck or edit whatever is broken. chroot can be a very helpful tool in this situation, if you need to run commands that aren't present in the initramfs. That might or might not require temporarily bind-mounting the pseudo filesystems /proc, /dev, and /sys.
If break=bottom doesn't work, then try break=premount or even break=top.