If you absolutely ONLY want them to be able to change ONE profile value, then you're likely going to have to write something custom.  See my post below on how to do this with a personalization. However profile functionality allows for user-maintainable profiles:
But the seeded functionality has a lot more than just printers being user maintainable. This will show them.
select profile_option_name, user_profile_option_name from fnd_profile_options_vl where user_enabled_flag = 'Y' and user_update_allowed_flag = 'Y' and end_date_active is null order by profile_option_name
So you'd need to review that list and see whether it was an issue. Would I set them all to not user-visible apart from printer? Nope - not without extensive testing anyway, as you could break some obscure standard functionality.
You can add the ability to update by adding the function "Profile User Values" to the user menu. That will enable this:
with the form being:
You can give a blank prompt on the menu entry if you just want to have the option in the Edit>Preferences menu.
you can achieve this using custom.pll