Can I still get passport stamps from Croatia (flying from the EU), Serbia (train from Croatia) and Romania (train from Serbia)?
If not, can I still ask for a stamp at the border as a souvenir?
I only have anecdotal evidence for you as a Croat who frequently travels with a foreign non-euro passport through ex-Yugo countries. On some of the land borders the agents get quite lazy and will literally just look at the outside of the passport and wave you through. These guys you can quite easily ask for stamp if they don't automatically do it (mime it if they don't speak English, they'll understand) but it will depend on the person you get. I get a stamp about 50% of the time.
My experience with the airports however is that they always stamp.
As for Romania, I've never been so I can't give you any advice there.
For Croatia and Romania, it depends on your citizenship and possibly on your country of residence and a few other details but not really on where you are currently travelling from.
These two countries are EU member states and they should not stamp EU passports (nor even require EU citizens from travelling with a passport, if they hold an ID card). I guess it's possible you could convince a border guard to stamp your EU passport anyway but in general they should not do it, no matter where you presently come from.
They are however not part of the Schengen area, which means they perform full border checks for land borders and incoming flights, even from EU or Schengen countries. The same rules therefore make it mandatory to check EU passports/ID and stamp non-EU passports (except for the holders of some types of residence permits). Unlike the UK, which is mostly free to set its own rules, Croatia and Romania have to apply the Schengen rules and show they can perform border checks to the Schengen standard (even if they have not joined yet).
If and when Croatia or Romania finally join the Schengen area, they will lift border checks on land borders with other Schengen countries or flights originating from them but would still stamp the passports of third-country nationals coming from outside the Schengen area. The border between Croatia and Serbia or between Serbia and Romania would thus become the “external“ border of the Schengen area, which means checks for everybody and entry/exit stamps in the passports of non-EU citizens as applicable.
Serbia does whatever it likes, including stamping the passports of EU and non-EU citizens alike.
To answer myself's question after my experience. When I went out of Belgium to Croatia, the airport custom first said I'm an EU national's family member, so I don't need a stamp, but after I kept asking, he gave me one :) Croatia did give me an outwards stamp on the train to Belgrade, Belgrade also gave me an entry stamp. But Belgrade refused to give me one when I took the train from Belgrade to Romania. Romania did give me both entry and outwards stamps. When I arrived at Belgian airport, they didn't give it to me even I tried to ask quite hard.
Croatia and Romania are supposed to stamp non-EU/EFTA passports (except if travelling with an article 10 or 20 card together with, or to join, the family member on the basis of whom the card was issued), but not EU/EFTA passports.
Serbia is supposed to stamp all non-Serbian passports on entry, and, since March 2018, on exit.
In practice, land border agents in Croatia and Serbia (and the rest of former Yugoslavia plus Albania) frequently don't bother stamping. In particular, when I took the Budapest-Belgrade and Belgrade-Skopje trains, the Serbs literally looked at my (foreign) ID card for two seconds (no, they did not even scan it), and I got the impression that they treat passport holders no differently.
As such, this is a region where if you use a passport, it's a very good idea to remember to ask border guards to put a stamp, as they are supposed to by law, and not getting one could lead to problems getting a foreigner's registration card, or exiting if getting a pedantic officer (which is more likely at airports).
Yes, Croatia still gives you passport stap no matter do you come with air or land. You need ask on the border. I live in Croatia and each time I go in Slovenia or Hungary I ask them can I get my passport stamp. They said "OK" and that's it. Also if you fly between two EU country you can also ask during passport control to get your stamp. Last year I get in El Pratt, Barcelona passport stamp.
Yes, you will get stamps. You will only not get stamps when travelling between Schengen countries. Croatia and Romania are not (yet) in the Schengen Area, and Serbia is not even in the EU (though there are non-EU Schengen countries, Serbia is not one of them).