I think this is absolutely fine and his tastes will widen as he gets older. I wouldn't worry.
My 3 year old is similarly fussy i.e., fussier than a lot of children but nothing I find concerning.
From your list, my son eats:
Granary toast (with butter or peanut butter- also peanut butter sandwiches)
Cheerios and milk or cornflakes and milk
Bacon yes
Scrambled eggs never!
Petit filous style yoghurt yep
Peas (at a push) No chance
Red pepper (at a push) would never even try it
Sweetcorn used to, not any more
Apples yes
Pears no
Watermelon nope
Roast chicken no
Chicken nuggets yes!!!
Chips no
Pasta with green pesto never touches pasta
Dough balls with houmous loves humous with breadsticks
Pepperoni pizza will not eat pizza
Peanuts nope
Raisins yes
Spaghetti bolognaise I wish
Popcorn no
Additionally he eats porridge, cheese haggis, black pudding, fish fingers and French toast. French toast is the only way in get eggs in him.
My son also eats soup which is the only way I get lots of veg in him and chicken (bar chicken nuggets!) Would your son eat soups?
If it's not in soup he eats no veg. The only fruit he eats are bananas, apples, satsumas, blueberries and strawberries. He will eat dates and dried apricots so if your son likes raisins he might entertain other dried fruits. You just need to check which ones don't have sugar added.
I genuinely think you've nothing to worry about. Give him a multivitamin every day and blend as much veg as you can into his Bolognese and he'll be just fine. You could try adding flax seeds/chia seeds etc to things. I put them in my son's porridge every morning. Smoothies are another good shout as you can make them thick and sweet like a milkshake but hide all manner of fruit and veg in them- use whole milk, frozen bananas and a bit of honey as the base and then blitz whatever else you like. Flax seed mixes are great in smoothies.