Adding -DCRYSTALLESS to the Makefile worked, as well as setting up -DCRYSTALLESSto board.txt
For future people, below is the edit to Makefile (following by a build in Atmel Studio 7), using the bootloader found at ArduinoCore-samd/bootloaders/zero at master · arduino/ArduinoCore-samd · GitHub
CFLAGS_EXTRA=-D__SAMD21G18A__ -DBOARD_ID_$(BOARD_ID) -D$(SAM_BA_INTERFACES) -DCRYSTALLESS
Then modifying board.txt to have the following line:
arduino_zero_native.build.extra_flags=-DCRYSTALLESS -D__SAMD21G18A__ {build.usb_flags}
A basic Blink sketch is now working correctly and it's behaving normally. The HID code I've got on my Arduino prototype isn't working yet. I think I've still got to set up a variant board, currently following the guide at Adding custom (Zero based) boards to the Arduino IDE - #2 by MartinL, although I'm worried this might be an out-of-date guide.