As a father of a fellow picky eater I feel your pain and I will offer advice from what I've experienced.
First, since you said he likes Mac and Cheese, switch to this
http://www.amazon.com/Kraft-Macaroni-Cheese-Dinner-Original/dp/B004R8L71W Yea, still not health food, but it's an easy meal that's not the worst thing in the world when you don't feel like having to rip your hair out and not feel as guilty having them eat mac and cheese again. We go through a few boxes a week of this. It's a quick win.
Next big thing is getting over what I'd call color phobia. With my kid anything green was an instant NOPE. Kids love juice and it just so happens that Naked Juice Green Machine tastes just like apple juice and is loaded with good things. You can get it at Target, Walmart or Costco in BIG bottles for like $6, buying the small bottles is a sure way to make sure you go broke. Be sure to watch how much you serve, while it's all natural sugar it's still a truckload of sugar and not good for pancreases, especially little ones.
Once they start to like that and understand things that are green can taste good, start presenting good tasting green food. Boiled mushy nasty veggies are not included in good tasting green food. Fresh green beans, grilled/stir fried asparagus, something like that. Crunchy, fresh, good tasting veggies with a little bit of oil or butter to add some flavor. A lot of times we give just a small amount of juice, then reward with more juice or more of something else if they eat the veggie.
Stick with it and stay strong. Every now and then we still run into problems but it's gotten better. I've read stories about kids that eat anything put in front of them, see other people with them at restaurants...but never have I seen my kid do that. Every piece of food gets inspected and most things we need to reward with things he likes in order to eat it. My kid has a thing for ice cubes, so when he eats something we want him to, he gets an ice cube to chew on and doesn't get another until he eats another bite. Come up with fun games, songs to sing or something else as a reward.
A lot of parents cave, just let their kids eat the same hot dogs, mac and cheese, chicken fingers and noodles w/ butter until they're 8, then decide "hey you need to eat new things" and try to jam all kinds of new flavors on a underdeveloped pallet and wonder why it doesnt work. My 2.5 year old eats Thai, Indian, Chinese, Mexican, Italian and American foods so far and let me tell you the only thing that has ever been easy are the carbs.
All the time and effort you put in now will pay off 10x when your 5+ year old kid has a well developed pallet and loves all types of foods. Trying to expand a pallet after that much stubbornness has developed is not something I want to do.
TLDR: Get them used to green food then present GOOD tasting food, come up with fun rewards (songs, games, other healthy food they like).