(Note: this occurred in the Old Genesis mod -- I suspect it's relevant to vanilla as well.)
tl;dr: *ANY* caravan unit left on map might block all future caravans from its home civ.
New fort, second home civ caravan visit coincided with a greenskin raid sent the merchants and guards into a panic. After we dealt with the raid, the merchants were stuck -- some at the depot, some just standing out in the countryside beside paralyzed beasts of burden, slowly going insane. They wouldn't leave.
Eventually I gave up and used dfhack fix/stuck-merchants and they left. For 6 years, they never came back. Home civ still existed, could see them on world map. I used the "one unarmed squad diplomat + raid + demand one time tribute" trick to get all surrounding civs to start sending me trade caravans, so I wasn't completely cut off.
Those 6 years?
No migrants either! I'm like 8 years into a fort with a population less than 30 and a handful of kids. I used dfhack fix/population-cap -- nothing.
I used dfhack force caravan
http://www.bay12forums.com/smf/index.php?topic=171488.0 -- didn't work.
Finally, after about 10 in-game years where my SOLE source of citizens was itinerant bards, I realized there was a pack animal still stuck on the map. I thought about dispatching it with squads but feared that might turn us hostile to my home civ, so dfhack exterminate killed it.
Few months later? Dwarf caravan, and the single biggest migrant wave I've ever seen.