The way the firmware is coded (main.c, function mp_task()) , first boot.py is called, and then main.py, if the mode is PYEXEC_MODE_FRIENDLY_REPL. The behavior you have seen does not meet that coding, unless boot.py does not finish or the device is set to raw mode (Ctrl.A).
You may start code from main.py, but that would also not get you a REPL prompt, as long as it is running. You can start a thread in main.py with you program, which will run in parallel to the REPL. But if the device is planned to run unattended, this is seems not to be needed.