When answering a question, I've noticed that sometimes a sleuth will answer in the comment section with a complete answer, as opposed to with a formal answer. Are there any reasons to do this, and what should happen when a question appears unanswered when in fact the person asking the question has already left a satisfied customer?
What @luser said in their answer is a very frequent use case. There are a couple others as well:
Some of us feel that an answer ideally should include references, preferably to original material, when possible. When you know what the answer should be, but can't back it up with a quote ATM, you post as a comment instead (I've done that).
A second use case is when the answer is so trivial and pithy that you feel the need to state it, but worry that - as an answer - people will downvote it BECAUSE they would mistake pithiness and conciseness with smart-alec-ness and poor quality. This way you express the correct information without incurring either the rep loss of downvotes, or more importantly the side effect of your answer being disregarded by future readers due to said downvotes.
As an aside, I have more frequently seen in such cases that the original worry is baseless, and when OP of the comment or someone else posts the comment as an answer, it does NOT get downvoted and frequently upvoted :)
When the question itself is of somewhat poor quality, and the user doesn't feel it warranted to bother spending time writing up an awe some answer.
I've seen the same thing and I suspect the sleuth in question simply doesn't feel their information to be substantial enough to occupy that big answer box. But he or she offers the clue in the hope that it may assist a potential answerer who can "fill it out."
I've done this.
Or it may be a lack of certainty in the answer. Just not sure enough.
If it's your own question, you can invite the commentator "make this an answer so I can accept it." But be careful. I did this once, and then a short time later bigger better answers showed up, and I did not keep my promise. :(