Woohoo it's routed! And the DRC passes. I'll post source on Github soon and then start work on the 3d printed case. EDIT: source on github.
Here's the evolution of the layout. I took a screenshot of the bottom half since that's the interesting part. It's fairly easy to move components and then autoroute with FreeRouting. I've shuffled a lot of components, changed the edge cuts, made the board slightly shorter and fatter, and shrunk the start/select buttons.
v0: Bad. Components were roughly placed on the board. I accidentally had 10 mil track width so the USB-C connector wouldn't route.
v1: It works. It routes now but it's ugly, the USB resistors are too close to the buttons, and there's very little room for future features. The autorouter found some interesting routes near the USB connector that I wouldn't have thought of (I hope they work).
v2: Better. The start/select buttons are in the wrong spot. I wanted the USB power and data lines shorter, and I didn't want them to cut across the tracks for the button contacts. Many of the components have been rotated - I selected the atmega, all the components underneath, and the header pins, then rotated. The flex area for the USB connector now goes down instead of sideways.
v3: Good layout. I moved the start/select buttons (the smaller contacts) into the bottom corner, moved the components slightly, and reassigned some pins. There's breathing room now so I could easily route analog components (the pins on the left side of the ATMega).
v4: Tweaks for the DRC. This is the last change for now. I adjusted the clearance on the USB-C pads (4 mil pad clearance instead of 6 mil) and barely moved the reset jumper. The autorouter ended up changing a lot of routes but it looks fine