Why are navigation items saved in the database?

Filter wp_nav_menu_objects and add your custom items dynamically (see this example or this). You get the current list of items and the arguments wp_nav_menu() was with as parameters. Then you can just add new items or remove existing ones.