According to the source code available on GitHub, the recovery performs a whole bunch of operations aside from simply launching the daemon in background, copying the su binary to /system/xbin and changing its permissions. As can be understood by examining this install-su script, what the recovery does, is to initially perform a cleanup operation for root manager apps that may have already been installed.
After that, the operation of copying the relevant files, namely, the su binary (which is called anytime you request root privileges), the 99SuperSUDaemon (which execution depends upon init.d), a customized install-recovery.sh (to force the daemon to be executed on Jelly Bean) and SuperSU.apk (the root manager).
After this phase, the script uses the previously defined functions set_perm (which combines chmod and chown, and serves to define ownership and permissions) and ch_con (which marks the files as system ones). The latter is probably the cause of your manual procedure's malfunction: you didn't change the context of the files you pushed, so they weren't recognized as system files.