There are different lib files based on settings - debug vs release, static vs dynamic. See that link I posted before - it lists various names. Thus the correct name is put in .obj file based on compilation settings.
Yes, that size reduction is mainly from CRT startup code. Because there's nothing else in main() that calls any CRT functionality - so that is automatically stripped out. There's no need to use nodefaultlib
if you have your own entry point. Linker will strip out everything automatically.
Be aware that if you're targeting modern Windows (Win 10 and up), then CRT is always present in windows. User does not need to install anything. You can just link to it dynamically and exe size will be tiny even if you call bunch of functions from CRT.