This is possible, the each carriage can have a parent or a child. Usually you’d set this in the editor, but there’s nothing stopping you from doing this dynamically.
There are also track triggers in the system, so for your setup you’d have your train run over the trigger, and disconnect one of the carriages from the parent.
Then you’d have another trigger that reconnects them.
You’ll probably need a custom trigger, but that’s all straight forward.
Yep, check out the map: movement_smoothing.umap in the maps folder. It shows two trains, one with smoothing and one without.
It works pretty well and you can tune the smoothing depending on what you want.
You could build far more accurate movement functions for splines in UE, but this works well as a general use case for most peoples needs.