If you are writing different libraries for each platform -- that's not 100% code re-use
sure it is. if you use libc - is that code re-use? i have done a library for a generic platform for developing on top of. it is a library; that as a developer you dont have to write - you just use it.. just like openGL, libc, mathlib et al
You're not "just distributing" the same binary for each platform.
unless there is a universal "thick binary" standard; you are going to have to ship different binaries. thats how it is.
What are you using for graphics, sounds, storage, etc. on each platform?
graphics - you can generically define graphic sets based on DPI. scaling, layout design. it is not difficult to play with different resolutions. as for audio; worst case; you have PCM audio.
You're doing this without a bunch of #ifdef's?
yes!
How are you accounting for different screen resolutions, graphics hardware, touch capabilities, and other hardware difference?
very good design. :)
but seriously - a good architect design can allow you to dynamically detect, load and work with functionalities across platforms. abstraction is dangerous - as it typically defines a common denominator. like web technologies are being dynamic in the way they work (ref: RESTful) - you can do the same with programming.
i've been working with mobile platforms for 10+ years and i've played with almost every platform out there. i avoid .NET and Java like the plague for mobile applications - the end results are very slow and just doing deliver what i want from a programming environment.. sure, i need to do more effort - but the results are better.
this is what i do for a living as well. if you want to discuss more offline - you can reach me via the contact me section on my website.