Use the 'ap' command.
Complete the addition of the user on the first machine then:
ap -d user >/tmp/user.data
copy the file tmp/user.data to the rest of the machines, and on each of them:
ap -r -f /tmp/user.data
The user will have the same user profile ( not .profile) and user id on every machine along with the correct privileges and authority and groups.
You still have to copy any .profile to the various machines.
I am no expert for SCO, but in most UNIXes (and i presume in SCO too) the passwd utility clears the buffer before using stdin, which is the reason why a pipeline won't work (in fact this is the desired effect - passwd is not supposed to work that way).
You can use a program to emulate an interactive session like expect to do what you want. See the expect manual for details, but it quite straightforward: you look for a certain prompt and then feed it a string, the program will think the string was entered by keyboard.
UNIX even has the isatty() call for secure applications, to check whether stdin is a terminal or not, but I've mostly found these sort of apps ignore stdin and grab /dev/tty directly. This is handy since it allows things to successfully prompt for a password even when they're buried deep in a pipe chain.