The way I did it was to run Weston without any icons or anything and using systemd to start my app and also having systemd reopen my app if it closes. Worked well enough.
No WM at all is less nice, but can work. A bit over a decade ago, we shipped a kiosk/appliance that software-wise only had kernel, X, and firefox. All starting directly from /etc/inittab, something like this:
...where /etc/rc-∗ are few lines of shell that set up environment variables, and end with "exec chroot --userspec=... / /bin/firefox ..." - this way X and firefox run under same PIDs that sysvinit knows about, so they get restarted after a crash.