Linux (and every Unix I've used) perform password expiration on a daily basis, not an hourly one. This requires superuser (root) privileges to set up, but once set up, every password would expire after the number of days set. Like you mention, the -x option can override this (it's actually "passwd -x 1 [username]") but you would also need to override the mindays to 0 so it could be reset
passwd -n 0 -x 1 username
All that being said, it won't work for you as you need the password to expire after an hour, not a day. You could leave the process running after you change the password the first time with a "sleep 3600" and then change the password again, or you could set a timestamp in a file somewhere and check it with a cron job.
You probably don't want to run the cronjob every minute to check for a password change ticket though. If you set it to run every 5 minutes to look for a ticket that was older then an hour the passwords would timeout after at most an hour and 4 minutes 59 seconds. That is probably sufficient, however you would be the one to judge that. This would also not put as much load on your system to do something that won't be necessary 95+% of the time. You can increase the time between checks to suit your needs, the faster you do it, the more accurate your timeout will be at the expense of using more resources. You'll need to judge a happy medium between the two.
The second way this can be done, keeping the process open and sleeping for an hour, you leave a lot of resources tied up, but they would likely be swapped out and wouldn't use very much CPU. Enough of them at once though and it could cause serious resource utilization issues to your system.