More specifically, it only happens after the engine has been bootstrapped. The bootstrap process of an engine is what ensures all the dependencies have been cached.
There isn’t one way to do this really. Launching via the launch app is one way of doing, but as you say with Deadline at least that is probably not so simple as you need to modify the Deadline plugins, to handle the launch via Toolkit.
The approach that has usually been suggested is to just ensure that the env vars are passed to the job and that you have a bootstrap script setup to run on the farm once the software has been launched.
I think my preferred approach to handling Nuke write nodes would be to have a pre job to the main render job, that once Nuke was launched bootstrapped Toolkit and converted the SG write nodes to standard write nodes, saved a temporary nuke script, and then the main render job would run off that.