Simply, (not provided) is Google hiding keyword data from you. They introduced this “feature” in 2011, as a privacy measure.
Edit: as of late September 2013, this now applies to all query data from Google. (not provided) covers everything.
Previously, Google Analytics reported all of the search terms that people used to reach your site. After this change, search terms are only reported for people not logged into Google with their Google Account. Upon launch, Google claimed that this change would only affect 10-15% of queries, but as they have pushed the adoption of Google Accounts, this percentage has risen to around 40-50% so far (depending on your niche). You can track the rise at Not Provided Count.
This is a problem for site owners and search marketers, as keyword data can be vital for both understanding how your site is performing in search and uncovering potential new opportunities. Yes, there is some data still available, and yes, one can glean some insight from Google Webmaster Tools’ reports, but this is no substitute for real, one hundred per cent accurate data.
The real irony is that Google Ads customers don’t have this problem – all keyword data is given to them, whether the searcher is logged in to their account or not. So Google clearly don’t care that much about privacy after all.