There is something systemically flawed with Reddit's moderator system which precludes it from ever being an unqualified success as a social news aggregator.
The primary issue revolves around the selection process for moderation. To become a moderator for a subreddit, you need to have thought of the name of the subreddit. That's it. This nomenclature designation act grants any user absolute power within that domain space, and the ability to grant any other user the exact same powers.
The person who created the "programming" subreddit has no qualifications, no resume by which to judge their aptitude for the moderation job, and no process exists by which to vet newly added moderators.
A moderator can, for any or no reason, decide to activate the "spam filter" on any submitted article, removing it from public voting and view. This is the only tool by which Reddit moderators are given to modify their respective domains, and when used for reasons other than spam, it "teaches" the filter to remove non-spam results. This is the cause of the "broken" spam filter on Reddit - moderator abuse.
I think you hit the nail on the head with your last point, though I wouldn't necessarily call it moderator abuse. The actions that moderators can take on reddit were built on a laissez faire model of moderation, where anything goes except blatant spam. This obviously doesn't work very well for moderators who choose to run their subreddits in a different manner, and this happens to be most of the big subreddits, because laissez faire moderation just doesn't work on a large scale.
For example, the sole /r/truereddit moderator believes in a laissez faire moderation style, and the subreddit is slowly getting worse and worse as the userbase increases. Every time a /r/truereddit post makes it to the front page, a virtual swarm of idiocy surrounds the entire subreddit for a few days.
But that's the only way the moderation system is designed to work. There's no way to remove/approve content without training the filter. If someone submits a codinghorror post to /r/programming that is completely off-topic, the moderators either have to remove it, effectively warning the filter that codinghorror might be spam, or hope that the userbase does the right thing and votes it down. Usually, they won't, especially the people who are voting from their customized front page, not paying attention to what subreddit something is in.
It's broken, and the admins have never really expressed any concerns about this fact.
One of the core problems with even talking about the issue is the general disdain Reddit users have for one another, or to be more accurate, the disdain individuals have for the collective. The idea that content can be "better" or "worse", and this can be judged by an individual to the exclusion of the group, completely circumvents the entire concept of Reddit - crowdsourcing news.
>The idea that content can be "better" or "worse", and this can be judged by an individual to the exclusion of the group [...]
This happens in every growing online community. As the community grows, the new members don't necessarily have the same interests as the original ones. This happened at digg, reddit, and now even HN has posts about declining quality, which is another way of saying content can be "better".
I know that most, if not all of the earlier admins are on HN. Reddit was originally funded by ycombinator. It wouldn't be too much of a stretch to think that the new guys do as well.
As far as self promotion, there isn't a whole lot of consensus on it. The community aspect of the site is somewhat at odds with the link aggregator model. If bloggers submit all of their content, pretty much automatically, and don't contribute to the community in other ways, that doesn't really tend to go over so well. As a result, people who create content are expected to invest time and energy into becoming part of the community so they can accurately gauge how their content will be received.
It's not just supposed to be a place to dump all your links.
/r/programming is more biased towards the link aggregator model than the rest of the site, however the community aspect is still there. Someone mentioned a 10:1 ratio for other content to your own, however in /r/programming, I usually say that 50/50 is fine.
Personally, I dislike how the moderator system for subreddits uses a oldest-first hierarchy, where older moderators can always remove newer ones. Hence, a subreddit has no such thing as equal moderators. There is always one "on top", as such.