However, I have all the required packages installed earlier in the kickstart script. In fact I can run the exact same command after kickstart (when the server boot up) without any errors to successfully join the domain.

Does anyone know a way to work this out via non-interactive kickstart so I don't run the command manually? Thanks

If you run the adcli delete-computer before the preset-computer, you don't need to worry about whether the computer object already exits in AD. Also, If you have multiple DCs (which you should, for redundancy), be wary of your DC replication cycle. You may need to pause between commands to allow sufficient time for replication, as in the code below: