For type definition, you must consider each ".c" file as autonomous :
If you manually add a definition of Point directly in main.c, you'll have 2 definition of Point in step 2, which leads to the expected error.
Type definition are not kept in ".o" files, so there's no problem of duplicate definition at linking stage.