How do I set user account inactive?

how about just setting user meta. Something like ‘my_inactive’ and set it to true, then you can evaluate by something like if( get_user_meta( $user, 'my_inactive' ) === true ) and have a quick way to check that without destroying any of the user privileges or anything. This will allow you to hook login and just prevent the user from accessing the backend, rather than changing any of their account settings. The way you would allow users to reactivate would be by adding a link to /wp-login.php which would send a reactivation request to you, and allow you to move from there (or just autoreactivate). If you need any sample code, let me know and I can whip something up. I’m not sure which hooks in particular you’d need off the top of my head, but I’m pretty sure most/all of them exist.