After check your source code, I finally and with your theory:
> Org doesn't load automatically.. it autoloads only if you open an Org
file or call an org-loading function. After emacs -Q, if you do M-:
(featurep 'org), you will get nil. So the user does get a change to set
the load path as they want before any package gets loaded.
I finally understand how it works. Yesterday, I use a crude way: delete Emacs built-in org/ directory. This works too. But I still take your method. Your method is the correct way. Thanks very much.