I'm sorry that you feel that way, but let me clarify that statement a bit. Finding them is difficult, not because people don't want to work here, but Canadians are usually the ones more willing to work at Canadian companies, so the overall tech talent pool is a bit smaller to work with. In the US, you've got people from all over the world vying for positions. Canada has to present itself as a technology hub to attract more international talent.
Retention is better, not necessarily because there is a lack of innovative companies. In fact, there are definitely a a number of great companies to work for in Canada that aren't the sweatshops that you mention (and I would like to count ours among the innovative and great places to work).
The retention aspect is more about the mentality of people in Canada when they join a startup. In silicon valley, there are A LOT of companies, and every week it seems like there's some hot new startup. Given that, a lot of tech people there have the mentality of hopping from company to company just to maximize their own short term gains. We personally don't feel that that type of employee behavior is healthy.
Compare this to another area in the US which has a healthy tech scene, but WAY better retention. Seattle. There are definitely a significant number of tech companies there (Amazon, Google, Facebook, MS, etc.) with great working environments. But the reason retention is better there is because it's a bit further away from the silicon valley hype.
Similarly, in Canada (Vancouver), we try to offer something very similar. Great work environment, competitive compensation and a general good tech place to work. As employer's, we will NEVER hold all the cards (heck, all our guys could go get a job at any tech company in the world, including silicon valley). It's just that the people we've managed to find up here have been more focused on long term growth potential than short term gains.