I have no real experience with using Kotlin but I'm thinking back to the last time I worked directly with threads in Java. I'm not even sure I actually went with that approach, but I can remember why I considered it.
Essentially the problem I was having was an issue with pushing logging IO to an external aggregator. There would be times when the speed of transmission was slower than the amount being created. That would be OK for a little while but eventually the logging buffer would fill up and this would cause the application to block on writing logs. The goal was to try, as best as possible, to eliminate that from ever happening. So, the theory was that if the listener for the incoming data was being managed at a level above the thread, the IO listener could be paused both because of thread switching and due to the concurrency abstractions. This could result in 'plugging the drain' of the logging framework.
In a nutshell, the idea was to make sure that the logging input was 'sucked in' as soon as possible so that the logger's internal buffer would never be full. Again, I'm not sure I ended up doing this or if I did, whether it was really necessary. The overhead of using a dedicated threads like this is high and it was probably overkill because the internal logging buffer was big enough to tolerate short pauses.
So perhaps, if you have real-time or near-real-time requirement, I could see using a dedicated system thread to minimize delays in reacting to events. I'm not sure this is really going to be effective, though, especially unless you have a fair amount of control over the host environment.