Как написать 2D движок на Python?
Думаю вам лучше копать не в сторону питона и pygame, а в сторону архитектуры игровых движков, а технологии не принципиальны.Литература о построении игровых (графических) движков?
Кстати, помимо pygame есть еще pysfml  и pyglet, как мне кажется они более низкоуровневые и больше подходят к вашей задаче. Но если вы совсем новичок, тогда лучше брать то, что проще, а это скорее всего как раз pygame. А если правильно продумаете архитектуру и полностью скроете все упоминания о pygame от конечного пользователя движка, то потом можно будет относительно легко заменить бекенд(pygame) на другую библиотеку, если от этого будет какой-нибудь значительный выигрыш в скорости.
Также хочу предостеречь вас, написание движков на питоне - относительно неблагодарное занятие, не зря я не встречал ни одного такого движка(разве что RenPy, но он для визуальных новелл, там скорость не нужна), а всякие pygame, pysfml, pyglet - это просто биндинги к сишным библиотекам. Питон сам по себе не очень шустрый и добавлять дополнительный слой абстракции - дополнительное ограничение быстродействия. На мой взгляд, если и писать игры на питоне, то просто сразу поверх одной из трех вышеперечисленных библиотек, без всяких движков. И скорее всего придется отчаянно сражаться за производительность и писать не совсем идиоматичный код: как-то избавляться от циклов, стараться поменьше вызывать функции, сокращать использование точек и т.д. Простые танчики или марио можно написать и без этих извращений.
Если у вас нет некоторого количества реализованных игр, лучше за написание движков и не браться, лучше пишите простенькие игры(тетрис, танчики, арканоиды, марио, ...) и собирайте набор функций и классов, которые используются в от проекта к проекту - это и будет ваш движок. Но нужно реализовать именно игру(меню, переход по уровням, простой GUI, ...), а не просто сцену с геймплеем. Начинать же сразу писать движок или что-то сложнее 
перечисленных мной примеров игр - подходит для очень небольшого процента людей и велика вероятность, что вы в эту группу не входите. 
ну а вообще нет ничего невозможного(код), хотя там минимум функционала.
Пишем платформер на Python. Часть 1Пишем платформер на Python. Часть 2. Подчасть 1Пишем платформер на Python. Часть 2. Подчасть 2