I don't think it's necessarily advanced users. I think readability is one reason. You're also not going to get any errors due to ambiguity in variable names.
When you do usingnamespace std; you are taking everything in the std namespace (not just the stuff you wanted... but everything) and dumping it into the global namespace.
This defeats the entire purpose of having a namespace to begin with. The whole point is to keep things separate so that there is less confusion and less chance of a name conflict.