I use OpenStreetMap on my side, but it works through their page. I wonder if it is possible to download some of the map and use the local server. So far I have found something like this: http://openlayers.org/dev/examples/offline-storage.html
http://openlayers.org/dev/examples/offline-storage.js
But here are using the cache.
Of course this is possible, OpenStreetMap's data is free and so are most of the tools around it.
For rendering your own tiles just follow the steps described on switch2osm in the serving tiles guide. You can also import one of the extracts if you don't want to serve the whole planet. Alternatively you can use some of the other available renderers and toolchains for creating your own tiles, for example Maperitive and TileMill.
If you are interested in routing then take a look at the routing wiki page and especially at the list of various online routers and offline routers for OSM.
For geocoding there are various search engines available of which Nominatim is the most popular one at the moment.