Why isn't it possible for either the moderators or users with very high reputation to be able to mark an answer as Accepted after a certain period of time?
Because, as the system is right now, it would most likely be seen as "cheating." For example, if I could go back to all my unaccepted answers, I could probably scavenge half of them, if not more, instantly giving myself somewhere between 18,000 and 37,000 reputation, and I could probably even do that project over a weekend.
In order to mitigate the damage, then, we'd have to have rules in place. No points awarded from those acceptances, can't accept your own answer (which would literally break self-answering questions), must be an abandoned question (e.g. at least six months old), and so on. A lot of work would have to be done to make this possible without breaking anything.
Further, there's actually an important metric where the number of accepted answers versus all questions is calculated as a ratio to determine the "health" of a network. Again, going back to the current system design, being able to affect this value would give the illusion of artificial health.
Because there seems to be loads of questions with great answers that are not accepted even months/years later, and the automated community keep bumping them to the top of the front page...
The bumping part is important; if we're reminded of those questions periodically, there's some possibility of accepting those answers we may have forgot about, etc.
There's actually been a number of discussions about acceptance of answers, including a "notification" that triggers periodically for unaccepted answer questions to the user, or an automatic acceptance of the highest voted (tiebreaker on oldest date) after a certain time frame, etc.
For now, all we can do is go to the questions that have good answers and leave a comment on the question reminding the user to accept the answer if it helped them. I personally don't do this for my own questions/answers, because I don't want to be seen as trying to farm even more reputation; my reputation is almost completely unsolicited upvotes and accepts, with maybe a single bounty in there somewhere.
However, if you come across a question with at least one good answer that you feel might be useful, do feel free to drop a comment on the original question. If the original poster is still active, they'll get a notification, and depending on their email settings, might also be reminded by email that there's a new notification.
Personally, I don't think that strategy is worth the time, because as it stands, there are approximately 79,000 questions, and only 35,000 or so accepts (about 44%). That would leave you with commenting on about 44,000 questions if you wanted to go back and try to improve the situation. Or, you can just start moving forward, perhaps with a comment template or even a template engine like this one that can be used to automate the experience.