You are not being abusive OP. Your son sounds very similar to my 4 year old DS.
Hole, you obviously had a very sad experience in your childhood but I don't think the OP warranted being called abusive, not enough information was given for you to compare that to your childhood and the comparison is therefore unfair. Also, if you raised 5 children without shouting, not even once, then you are truly a saint. Or a liar. The whole debate about whether a 4 year old knows what they are doing is silly, of course they know what they are doing in terms of basic behaviour. Clearly it's not a good idea to ask them to drive or change a fuse.
OP, great suggestions above already. I find telling him I'm not going to listen to him/stay with him when he's behaving like X. If he carries on, I walk away and ignore. The bath, one warning and then end it. Don't engage, just say "I told you not to do that, and I told you I would stop bath time." End of.
Have you ever looked into love bombing? It's effectively praise but works really well for my DS. I'm also really guilty of "babying" him to speed things up, to my shame he's 4 and can't dress himself and goes to school in September...
have you tried reward charts?
Parenting is such hard work, you are a good Mum, you've recognised you want to change your parenting - that's a great start. I went through a real screechy stage with DS after having my second baby, I really don't like those memories but - hey, parenting is hard and we all get it wrong.
PM me if you like, loads of your OP reminded me of myself.
Good Luck.