In a traditional interactive command-line tool, like bc or ed or git add -p, the kernel provides a bunch of standard user-interface commands, like <c-u> to clear the input you’ve typed, <c-c> to interrupt the program, and <c-z> to pause the program and return you to the shell so you can use commands like jobs, bg, and fg to multi-task between them. These days people tend to use tools like tmux or even whole separate terminals to handle task-switching between terminal apps, but a lot of people are still used to the Old Ways, so they persist.
Full-screen terminal tools like Kakoune and Vim and top and so forth disable the kernel’s standard UI and provide their own… but for the sake of conforming to people’s expectations, they will often implement the standard commands like <c-c> and <c-z> themselves. Since those functions are normally handled by the kernel rather than the running program, people expect them to work even when the program is stuck or crashed. Therefore, when tools implement those commands themselves, they try to do it as close to the “front-end” as possible, so that they still work if the main logic of the program is not working as expected.
Particularly in Kakoune’s case, the logic needs to be handled in the client, because when you press <c-z> in a particular client, you want that client to suspend, not some other client or the server. Also, if you’re using a non-terminal-based client (like Kakodemon) you wouldn’t want <c-z> to suspend anything, since there’s no shell to return control to.