There could be a bug in your game, OR if you store your scores in a plist life, those are easily editable. What I do to combat that is (and I use OpenFeint, though cocoslive is really good too), I submit a score before it's saved on a device. That way, their device will show the correct score every time, and even if they don't have connection right away, OF will send the score as soon as the connection is made. OF stores scores in sqlite3, so I think that's a bit trickier to hack than a regular plist. Then the score is also duplicated on the device in a plist file. So they can adjust the plist file as much as they want, but the adjusted score will never get uploaded.
So basically this is how it works:
1) Player gets a score
2) Score is submitted to OpenFeint
3) OpenFeint either sends it out immediately, or stores it in sqlite3 (if connection isn't available) so it can send it at a later time.
4) Score is saved in a local plist file for display in the level editor
If a player edits the score in the local plist, nothing happens because there's no way to push that score to OF again, unless you actually gain that kind of a score.
Another thing they could be doing is an "object dump" on your binary, and finding out the secret keys required to send scores to your leaderboards. They they have a rogue program that just sends the score.
Frankly I don't see a point to cheat in online games like that, but some people do it just to do it. I had that happen to me before.