I think the biggest problems are no the lack of a tool to do this, but in the skill in soliciting this information from other people. Especially if those users are on the other side of the world.
To answer your question we use JIRA to capture issues and Confluence to document requirements. But this probably wouldn't be any better than any competing system and is just an organisational choice based on typical business reasons.
Something that I might find useful is a way to link up a "requirement" from a user through to a spec, to design, to code, to the test plan to test it for full tractability. Often we see rules in code and have no idea why that rule is there, but it has to be preserved just in case it was important and was a requirement of the user!