I hope this isn't repeat info, but I don't have time to read all of the responses.
I have had similar problems with my 3 year old. My sister (a nurse) sent me the information below. I have tried it and it has made worlds of difference. You might give it a try. Best of luck!
Maybe you think it's part of your job to make your child eat. It's not. It's your job to give healthy foods at regular meals and snacks. It's your child's job to eat it!
For example, say your child refuses to eat. You have tried everything in the past, reasoning, threatening, bribing. What would happen if you let the child assume the responsibility for not eating? What would be the natural consequence of not eating? Going hungry, (without a lecture on the starving children of the world.) The child won't keep this behavior up for long if you act generally unconcerned. Serve the dinner for example and make no comments. When everyone in the family has finished eating, remove the plates and again say nothing. Do not serve the child food again until the next meal. If the child starts to groan and moan from hunger pains later, calmy and pleasantly tell the child you are sorry she is hungry and the next meal will be served in a few hours.
Children really want to have control over something and what they eat is the number one control issue. Assuming that your child is healthy, and has been growing well up to this point, you have to learn to trust that his body will tell him when he needs to eat, and that he will not starve. You should offer nutritious meals and snacks (generally three meals and two snacks per day are standard at this age), but do not feel that you have to make up for the skipped meal with extra food later. If the child is not interested in what is being offered, don't get into an argument, don't try and cajole him or force him to eat. Just end the meal at the appropriate point and take the food away. You should not offer him something else an hour later or give him an extra bedtime snack just because he missed the previous meal. If you do, that just tells him that he can continue to refuse to eat and eat whenever he wants.
That said, you do want to give him some control in this whole situation (Can you imagine how unhappy you would be if someone else cooked all of your meals but you never had any say in what was being prepared!). You can give him a choice. For instance, ask him, "Do you want peanut butter and jelly or bologna for lunch?" If you make bologna and then he says he does not want to eat it, he'll just have to wait until the next meal to eat something.
Also, don't only make foods that you know he hates. If two of the components of the meal that you are making are things you know he doesn't like, try and make the third thing (one of the side dishes) something you know that he will eat and like. You can thus give him a larger portion of that side dish and smaller portions of the things he doesn't like and encourage him to eat in that way. At this age it is important to offer a variety of foods and to try new foods periodically. Kids are very picky at this age and often will have spurts of interest in one particular food for a period of time and then subsequently not have an interest in that food anymore and then develop a new "favorite food."