Begin programming using audio signals
I did some research and found out that there's some really simple solutions. There's a software project by the name of minimodem which allows two computers to communicate over audio signals transmitted either over a cable, or over speakers and a mic.

This minimodem project is compatible with another project Arduino RTTY (Radio TTY) which literally gives the API RTTY.tx('Hello World'), from which the data can be picked up on a PC with a soundcard.

Going in reverse (transmitting from a PC/smartphone/etc to an Arduino) is significantly less well documented.

The general concept is called (Audio) Frequency Key Shifting ((A)FSK) and there are guides from TI and other manufactures of how to do it. Most solutions attach a small daughter board to handle the ADC, however it's documented that for low bit rates, the Arduino can handle this using the on-board hardware alone.