Some believe using text-indent to hide the anchor text is blackhat/spam.
I've been doing this for years and is completely false from what I can tell. It's a good application for graphic heads too - EXCEPT - I've never done it in this way:
I do not want to go and customize the wording for each button of each product for fear that it will be considered keyword stuffing OR overloading the page with certain keywords.
You **should** customize the wording, but keep it relevant and as you say - don't keyword stuff and you should be fine. What is "black hat" (or more "gray hat", I think) is large volumes of keyword stuffed text or any other effort to display different content to search engines than what your user sees. That is not what this effect does.
Title attributes: basically the anchor text names the anchor("widgets") and the title is used to describe where it takes you ("shop for green and blue widgets of all sizes.") Honestly, I don't use titles a lot. If the surrounding text adequately describes what the link it going to do, there's really no need for it.