To add to what George says....
Google often tries to crawl pages that don't exist - simply to make sure they aren't missing anything on your site. When a page is clearly broken, you want to communicate this to Google by serving a 404 (but you can make it a friendly 404)
Here's what Googler John Mueller has to say:
What about the funky URLs that are “clearly broken?” When our algorithms like your site, they may try to find more great content on it, for example by trying to discover new URLs in JavaScript. If we try those “URLs” and find a 404, that’s great and expected. We just don’t want to miss anything important (insert overly-attached Googlebot meme here)."
Google expects to find 404s on your site. When they don't find 404s for links that should be broken, this sends confusing signals and could cause crawl problems.
I recommend reading this entire article - it's one of the most helpful I've ever read on the subject: http://googlewebmastercentral.blogspot.ch/2011/05/do-404s-hurt-my-site.html
As for expired products - as George said it's best to 301 them, usually to a category level page.