Not sure on the time since off issue, you would need to somehow grab the time when the user closes or multitasks away from the app, store it, then compare with new time on re-launch. I'd be keen to hear solutions for this too though!
With regards to cheating, I believe the only way around it (and the most commonly used solution) is to grab the time from a server online rather than the device.