I wrote a program that uses multiple libraries to handle different needs.
-wrote a directsound library to handle sound effects and looping sounds, fading, panning, etc
-used an older version of fmod to handle mp3 streaming playback / jukebox mp3 playback
-wrote libaries to handle parallel port output, solenoid protection routines, lamp/flasher output
-wrote a bunch of directdraw code to handle the graphics (2d only) and some basic effects/animation abilities etc.
-wrote the gamecode core structure
-added a graphical console module that can be brought down with ~ to debug things (looks like a console from a game like quake 2 or 3 (etc))
-switch handling library, programmed to ignore repeated switch hits in rapid succession / vibrating switch.
This project was started well before the P-Roc and all those things were popularized, so I've been sticking with it so far. It's based on the pinmame-hw design. Who knows, I may change things up in the future. It's just for fun. Writing all the libraries and making sure they behaved nicely was time consuming, but now it's nice to have pre-built libraries I can play with. Initially it started as a very complex visual pinball table (I should have released it, it went well above what VP originals were doing at the time) and then a complete re-write into a standalone EXE with COM+ objects happened from there.
The way it is now, I have a machine with pretty serious sound capabilities, nearly endless mode capability, good graphics potential with an LCD monitor in the head (fairly easy to develop for but somewhat time consuming), PC controlling the whole thing; it's quite a capable platform to develop on if you have some older pc's you can sacrifice.
Main problem now is waiting for some replacement CNC parts to arrive so I can start getting to work re-designing and cutting the playfield (old one was a mockup cut by hand)!