South Africa managed to take 10 wickets over the course of 130 overs (a day and a half) in the second innings of a Test match (meaning all the wear and tear on the pitch has been accounted for). While their bowlers are far better than India's, giving up 460-odd runs in the second day of the Test is definitely above average--which is why I think the pitch was pretty good for batting and the game would have been a draw if India had played better on the first day and the pitch wasn't as juicy.
Yes, India on average doesn't have the ability to consistently take 20 wickets. But matches are never played on average. You will always have performances that are below and above average. One such performance was Sreesanth's five-for in India's last tour. I can pretty much guarantee that no one, before the match, would have gone in saying Sree would take 5 wickets and that the Saffers would fold for 84 to set the match up nicely. But it happened.
The fact is that we don't know what's going to happen. All it took in this game was one solid spell of bowling on the first session of the game to set the game up perfectly for South Africa. Similarly, we may see a good session from one of the Indian bowlers completely out of the blue. It's not likely, but it's what makes the game worth watching.
There'd be no reason to watch the game, otherwise. If we knew the Saffers would be rolling us over easily 15 straight days of cricket then I wouldn't have watched the series (ignoring the fact that I didn't catch a single day of live action since the timings are so horrid). South Africa is very clearly the stronger team--I think anyone who doubted they were favorites were being delusional.