Is it possible to programmatically enable/disable privacy mode and groups mode for the bot?
Can bot do it by itself??
Or only BotFather can do that?
Also, is the 20 bots restriction per account still a thing?
It's not possible to change privacy mode using bot API, but you can use MTPROTO API to communicate with BotFather through a real Telegram account that is the owner of the bot. So the bot can't do that itself.
Yes, currently you can only create 20 bots per account.