i think that leaving him sitting at the table for so long can't be doing him any good. I would set a time limit for the meal and then take it away when the time is up whether it has been eaten or not. Don't make a big fuss about it but encourage him to eat when you are all at the table. If he is hungry later, he can have a healthy snack, but no treats. Sometimes they just like something served a different way, my older son doesn't really like his food touching each other but will happily eat his veg if it is a seperate bowl, my younger son says he doesn't like peas, but if I put a spoon of gravy on them, he will eat the lot in a flash.
I have found that my older son who was a really fussy baby and toddler has expanded his taste as he has gotten older (now 8) whereas my younger son (7) used to eat anything as a baby and is getting fussier as he gets older. He seems to have sensitive taste buds and can tell the difference between brands and can even tell when something has changed the recipe. No wonder he is not great with home cooked food as it tastes different every time!