Your frustration is a common one for a parent of a 3-year-old. It may not seem like it, but your child is working on becoming more independent and establishing control of his environment. In the long-term this is a good thing and will help him develop a good self-image, but achieving that goal often involves traveling a bumpy road. He is testing you at every turn, and your job is to keep him safe and help him learn self-control and independence.
First, try to think about all the things he does that upsets you. Then choose the ones that you feel most strongly about; things that might involve him getting hurt, for example. If it's a matter of him choosing what shirt to wear, let him make that choice. If, on the other hand, he won't stay in his car seat, then ensure that the car will not go until he's in the seat.
It's important to let your child start to make some choices and realize that he does have some control. However, he needs to learn that throwing things, destroying property, or hurting someone is not acceptable behavior. If your firm voice won't get the response you desire, then hold him tight so you both regain control. When he calms down, talk about why he can't do that behavior and about what might help prevent him from doing it again. Encouraging children as they develop more language to "use their words" instead of hitting or throwing or not listening will often work if the parent is consistent about asking why such a behavior has occurred.
Be sure to praise him a lot if, on that rare occasion, he does follow your direction. At the end of the day, talk again about what behaviors displeased you and ask again how you might help him follow directions better tomorrow. Be sure to remind him how much you love him. A direct, firm, but loving approach is the best kind of teaching for a child. Regarding your concern about preschool, often children do behave better in situations outside of their home, and with a different authority figure. This is probably because they are not quite as secure in a new setting and don't know how another adult might respond to them. Finally, be sure to keep in close contact with your child's preschool teacher about his progress.