My 13yr old DS dresses relatively smart-casual I guess. (Skinny jeans, shirts, t-shirts, the odd hoody - rather than tracksuit bottoms and sportswear which is what most of his peers seem to live in.)
Pull & bear has quite a bit of stuff in their men’s section which comes up small.
Zara is also good - their stuff comes up really long and slim so suits my DS perfectly, but it depends on your son’s shape/build.
H&M can be a bit hit or miss - we have got a few decent things in there for DS, but the reality is that most of the time we go in, find nothing for him but DDs come out with armfuls of stuff!
New Look also have some decent men’s stuff in xs which might work.
Topman is a good shout for sure - they do a smallish range in xxs. My DS has a few things in xxs and a few in xs and they fit him well. For a recent wedding he got men’s skinny fit navy suit trousers, an xxs pink shirt, a skinny navy tie. He wore his converse on his feet. It was a summer wedding so he had his shirt sleeves partially rolled up which kept it a bit more casual, and of course no jacket also made it look more casual. For winter you could do similar but a nice jacket instead of an actual suit jacket - a pea coat or military jacket maybe. Something like this from New Look would work.
I will say that while my son dresses generally smarter than most of his peers, he doesn’t go around looking preppy in crew necks and shirts all the time. He’ll often wear something like skinny jeans, white t-shirt and then an open shirt over the top. He still looks smart (and isn’t in sports gear!) but isn’t preppy.
When we lived in the US we did shop a lot for him in Abercrombie which is a good mix of smart, but not overly preppy, but it’s too expensive here to buy unless in the sale. He has also outgrown his age 15-16 a&f jeans (he is all leg) but unfortunately the men’s xs are still too big on him.
Anyway - that was a bit of an essay, but I hope it goes you some ideas - I know how hard this age is to buy for.