The GIL is not only for C-extensions. Even if you could wave a magic wand and make all C-extensions thread safe, you may decide to keep the GIL, so that Python bytecode operations remain atomic. Use of the GIL was an engineering choice, to promote performance and simplicity, at the expense of responsiveness.
Because the GIL guarantees atomic bytecode operations, you can make those operations nice and fast, with no worries about thread context changes in the middle (another thread messing up your ducks while you have them nicely in a row). Also makes things simpler, because of the checks you can avoid, you can just plow ahead, knowing nothing happens with threading until you release the GIL.
But you lose responsiveness. Sometimes a thread is started for naught, because an earlier thread hasn't released the GIL yet. Would you want something like a GIL at the heart of a real-time system? Probably not.