Main reason I've seen is that labor requirements change and the company decides not to hold people they don't have work for. In technical fields this is also an easy way to clear the deadwood you don't have grounds to fire. Say you are in a dept with 12 people, and they hire 3 more for a big contract, and when it ends 3 people get layed off, but maybe not the same three that were hired.
I've also worked in places with a lot of seasonable workers that are only hired for a few months, or where everybody is out of work for a month or so a year as the industry almost shuts down.
Firing people without documented cause is messy these legalistic days.