After you compile the program with run as *OWNER authority, change the owner to a profile with SECOFR.
Place this into a CLLE source member:
CRTBNDCL PGM( mylib/mypgm )
SRCFILE( mylib/QCLLESRC )
SRCMBR( mypgm )
Grant *PUBLIC *EXCLUDE authority. Grant *USE authority to any profiles you want to run the program.
CHGOBJOWN OBJ( mylib/mypgm )
That will set the owner.
When the program is called, it will prompt to enter the profile being reset. It will then set the password to EXPPWD (or whatever you choose to put there). The password will be expired and the profile will be enabled. When the user signs on, he/she will have to set the temporary expired to a valid password.