Good question. Its the former, and its done using naming, as you guessed.
Internally, each belt item has a frame id; this is how the CPU ensures the caller’s and callee’s belts are separate.
Operations mark their output belt items with the frame id their instruction was issued in. The spiller takes care of saving and restoring this in the background.
This was described in the Belt talk, about 30 minutes in.