Qt/c++ library for interfacing with ELM compatible devices, as well as a .NET library.. Both of which make interfacing with an ELM device significantly easier.
VERY top level:
PC: Send request to microcontroller
Microcontroller: Translate response to a hardware protocol the ECU understands, send request to ECU
Microcontroller: Wait for response from ECU, translate it, and send it back to PC
PC: Receive response and parse it.
My suggestion? Don't try to do too much. Get a ELM327 interface. I HIGHLY recommend using the ones from http://www.scantool.net, as they are superior in almost every way, and reliably connect (and connect faster) every time.