He is still young, so you should be able to turn this round fairly easily I think. He is also small, so you don’t need to worry about him overpowering you at any point. I am guessing you might have had easier breeds before and his stubborness has taken you by surprise? 😄
You are right, it would have been best to tell him off from the word go. Do not let a puppy to bully you -ever, because that is essentially what he is doing. Please remember; you are the boss, and he is the dog.
He is still very young, essentially a toddler. He is growling at you/vet etc because you let him. He thinks he is in charge, but you can stop this. He is just trying to push the boundaries to see how far he can go (just like toddlers do with their tantrums. It is natural and just a part of their ‘toddlerhood’). Just stop this behaviour now, let him know it is unacceptable.
The positive approach (praising, rewarding with treats, play etc) for any good behaviour is always best, but you also need to make sure the pup doesn’t think it can boss you around. The more time you can spend playing with the pup, the better you will bond, and the more he will want to please you. Play and fun times are very important for pups (and you ).
When any unwanted aggressive behaviour is first shown (growling aggressively rather than playfully, biting when brushing/nail clipping is taking place etc), Grab the pup from the neck scruff and firmly say NO! Not hard, just so they understand it as “telling off”.
Just repeat every time unwanted behaviour is shown, and reward/praise enthusiastically when he behaves well. Consistency is super important. Never let him get away with unwanted behaviour, and always praise everything he does right. Just be firm. Goid luck!