syslogd has the ability to generate "mark" messages every X minutes, so you could set this to occur every minute and count the number of marks to know how many minutes the machine has been awake (±1, since you could awaken or go to sleep "in the middle of a minute" and lose that minute's mark). Direct the heartbeats to system.log and have the log rotation script count them and update a counter in some persistent file. Hm, even better, have a dinky script that just increments the counter by 1 every time it runs, and direct the heartbeat msg to triggr that script. Well heck...no need even for syslogd...just have a cron job that just runs that script every minute...now it can be a completely user-land thing instead of requiring admin access to configure it.
Edit: Unfortunately, none of this this works during sleep. And it may not even be possible to detect sleep (since nothing's running). You could detect wake-up and trace back to when sleep began, but if you sleep for 6 hours and then crash hard or lose power, you "lose" those 6 hours. It's easy to measure the times between each startup and the following shutdown, but again a hard crash prevents recording of the shutdown timestamp.