Вы можете избавиться от GIL точно так же, как парни из Linux избавились от Big Kernel Lock: просто добавьте множество более мелкозернистых блокировок или используйте атомарные примитивы, которые не нуждаются в блокировках.
Недостатком и главной причиной, по которой Python этого не делает, является производительность. Например, интерпретатор Tcl не имеет GIL, но может быть скомпилирован как многопоточный, так и не поточный, если вы используете многопоточную версию, вы получите производительность примерно на 10-20% меньше, чем в однопоточном случае. Так что, если вы не используете потоки, это на самом деле медленнее. Были исправления Python для добавления меньших блокировок, но они имели еще худшее влияние на производительность, поэтому были отклонены.
Это просто компромисс, разработчики Python решили, что производительность одного потока (и обратная совместимость с C-расширениями) гораздо важнее, чем возможность использовать много потоков на уровне Python. Вы все еще можете свободно использовать потоки внутри C-расширения, но это не имеет смысла на уровне языка Python.