Lwt 6.0 has just been released (announce thread) with support for direct-style usage via a Lwt_direct – see lwt_direct.mli. Have you considered having a version of your tool to convert from standard Lwt style to Lwt_direct?
I suppose the output on this example could be as follows:
let fetch_data id =
let user = Lwt_direct.await (Db.get_user id) in
let posts = Lwt_direct.await (Db.get_posts user.id) in
Lwt_list.map_p process posts