Compared to a typical TornadoFX application, when using JavaFx for what it is, like I do, you end up using much more subclassing and much more databinding.
If you want to seriously avoid all that, you have to take a longer step than TornadoFX did, and go the Jetpack Compose way, which is fully declarative (functional), instead of just pretending to be that, fighting against the nature of the underlying toolkit. If you have a look at the TornadoFX internals, you'll see that the author jumps through hoops in fire to do it, until it's just not possible anymore.