I've just seen all the replies. Thank you everyone for your suggestions.
To answer some questions
I don't think I ever said he 'doesn't eat' at all, but sorry if I gave that impression. I just meant he is extremely selective.
So, the foods he DOES eat:
Breakfast is the best meal of the day as he eats porridge or cheerios, shreddies, shredded wheat etc. Or toasted crumpet and jam. More often than not he'll eat the cereal dry, but at the moment he's in a porridge phase, so at least is getting milk.
Fruit - he loves and will eat pretty much any fruit.
Yoghurt
Cucumber sticks, raw pepper and carrot (recently only cucumber though)
French bread - as long as completely plain
Bread sticks
Rice cakes
Yorkshire puddings -dry, no gravy
Pancakes (with nutella) 
Pasta, you guessed it, completely plain, no sauce.
When I make homemade pizzas, he'll eat plain pizza base (no topping), the same for pies made with puff pastry, so basically plain pastry 
And that's about it, apart from, unsurprisingly, sweet things.
So no meat, fish or cooked vegetables AT ALL. No sandwiches. Not even the more 'junk' food things like fish fingers, sausages, burgers, chips. Just won't try any of it.
I wondered if it was a textures thing, as he loves to eat most things dry. Yet if it's pudding, he'll eat it. So he loves fruit crumble and custard, rice pudding etc.
Thanks for the book suggestions. I've read both of those - having read about them on mumsnet. I do try to follow their suggestions. We do try to be relaxed about mealtimes. We all eat together. We put food in front of him. If he complains, we always say he has two choices. He can eat it or leave it. He leaves it. We don't offer one food as a reward for another, we don't offer bribes. We don't withhold pudding if he hasn't eaten his main. Pudding is normally fruit or yoghurt, sometimes something I've cooked, like crumble or rice pudding.
We try to follow the rule of always having something on the table he does like. This is very hard though, and results in the following. We eat cottage pie and salad. He eats just cucumber. In 4 years he's had these foods offered 100's of times but just won't touch them.
So, yes, as Porto says, he IS just picking what he likes. But this seems to be where this approach of not stressing about it has led us. We keep offering food, he picks the bits he likes, and never tries new things.
I see other parents with completely different approaches. The 'just eat x more bites' or 'no pudding if you don't eat that sandwich' From what I've read, it's not really advised, but it seems to work for some people. I just wonder if we're being too relaxed and should be stricter? In my head, I'm not relaxed, I'm worry that I have such a fussy eater, and embarrassed when with other families whose children eat well.
I tried so hard to get weaning right. I read all the books, stuck religiously to the low salt and sugar rule, and yet he just wasn't interested. He was fussy from day 1. He did used to eat macaroni cheese, veg stir fry and baked beans, but hasn't touched any of those foods for 2 years now. Other than that, he's remained pretty constant to his plain pasta, plain bread etc 
Sorry for the essay. I've read before on here of people saying they've had fussy eaters who eventually outgrew this phase and started eating more. I just can't see that ever happening, and wondered what else we should be doing?