Wow - sounds like you have your hands full! Far be it for me to tell you how to raise your son, but I do have a few pointers as I have been through this stage with my now almost 8 year old (who is a complete joy :))
As far as the hitting goes, every kid goes through it, and parents have to find their individual ways to deal with it. At this age, children learn from example. Hitting him back (even just lightly) is teaching him to do exactly what you don't want him to do. What worked for me was just to hold his arm when he went to hit, kiss his hand or face or whatever, and say "gentle, that hurts mommy". They don't always get it right away, but if you show them what you want by doing it yourself, eventually they catch on. With the dog, same basic prinicple. Either that or you could try moving the dog to another room when he does that so that he doesn't have the opportunity to hit the dog. Eventually he will get bored of torturing the poor puppy, and learn to respect him as he sees you doing the same.
Regarding the fits in the store, that one is a little harder but you will get over it, as do 99% of parents. First of all, when you say you come back from the store with nothing after driving an hour each way... you're letting him control you. While he's not really able to understand the control thing right now, he can understand that he gets his way when he throws a fit, and it will develop into an understanding of control very soon if you don't get it figured out now. It's a power struggle, and if you let him win now, you'll be struggling for the rest of his childhood. You might try bringing a special "store time toy" that he likes and gets to play with only when you are in the store. This gives him something to look forward to while you are in the store. In regards to the fits ... I totally understand where you are coming from ... I've been there and it seems like everyone is staring at you. Now that I've had my second son, I've realized that it really doesn't matter. Unless you are in a controlled setting like a restaurant or library etc., you aren't being rude by letting your child express his feelings. If people don't like it ... they can leave if they don't want to listen to it. Telling him that people don't want to hear him throw his fits, or telling him it's embarrassing will only serve to knock down his self esteem (yes, even at such a young age - you would be amazed at what sets in!) and you could face problems in the future with him not expressing his feelings, and that's way worse than temper tantrums. If you are still uncomfortable with letting him throw a fit, try taking him outside until he calms down and then go back inside. It may take a few rounds, but eventually he will understand that throwing a fit will not result in him getting to go home like he wants.
I guess as a summary, don't let him control you and don't reward him for bad behavior.
Good luck - I hope this helps!