Reason No. 1: Flash's sub-pixel resolution and anti-aliasing
Do you want a border around a block of text rendered by HTML and CSS? Well, you can choose between 1 pixel, 2 pixels, or n pixels. The spec does allow floating point numbers, but the numbers between the integers tend to be ignored or rounded off in a slightly different way by different browsers.
Flash not only accepts floating point numbers, but uses the same rules to draw lines, boxes, and images on all machines. Using sophisticated anti-aliasing and blending algorithms to render lines, Flash gives the illusion that screens have more precision than they really do. The eye can tell the difference, and that's why Flash sites look better.
Reason No. 2: Flash beats Canvas
But anyone who compares the results to the better games based on Flash, Shockwave, or AIR will just be mildly amused. Many of the Canvas products are impressive, but sometimes the code just doesn't work or pokes along. Some browsers are fast and some are slow. Some operations are quick on one browser and sluggish on another.
Flash isn't immune to the complexity brought to us by the proliferation of operating systems and browsers, but it has been dealing with them for much longer. When the Flash plug-in doesn't crash, the results are slicker, smoother, and more consistent.