Services default to starting as
su my_user -c 'daemon my_cmd &>/dev/null &'
On Debian we use the
start-stop-daemon utility, which handles pid-files, changing the user, putting the daemon into background and much more.
I'm not familiar with RedHat, but the
daemon utility that you are already using (which is defined in
/etc/init.d/functions, btw.) is mentioned everywhere as the equivalent to
start-stop-daemon, so either it can also change the uid of your program, or the way you do it is already the correct one.
If you look around the net, there are several ready-made wrappers that you can use. Some may even be already packaged in RedHat. Have a look at
daemonize, for example.