this is done for the convenience of localizing the game for different languages

strings in .gsc are general purpose strings for developers. Localize*.iwd files decode these lines into messages like "PLAYER_CONNECT" (from .gsc) to "Player connected!"(from localize .str file).
if string from .gsc not find reference in .str from lozalize*.iwd - just a used that string.

You can make self languages-system in .gsc without localized strings and libcod.