Correct, essentially, on all points. Script code and Keyword Tests are two methods of creating tests to execute. Script code can be generated from Keyword tests but changing the one does not "synch" with the other. They are two seperate items.
As for "by default", not necessarily. When you go to the "record" button, there's actually a drop down that you can select to record a keyword test or record script code. You can choose either way of recording at any time. I believe the project remembers the last record method used,
Why have two different ways? Easy: Not everyone can write code. So, TestComplete provides keyword tests for automated testers who wish to create tests but do not have a code skill set.
Personally, I prefer script code over keyword tests but keyword tests are good and useable for certain things. More complicated logical stuff may require the writing of script code. But you can call script code from keyword tests and vice versa.