Would this be a fit for us?
Nadine...

You've asked more than one question, but I'll try to hit them all

1) CiviCRM lets you create public forms (profiles) that users can use to manage information in their contact record, such as email addresses, phone numbers and addresses. Depending on the CMS platform you're using, there are some other ways to allow for self-service updating of information, for example, on Drupal, there's a module called Webform that has excellent CiviCRM integration.

2) The profiles are completely configurable with all the core (built-in) CiviCRM fields and can include custom fields that you've set up in the database.

3) CiviCRM and all the supported CMSes allow for file uploads. CiviCRM lets you store attached files to contact records and activity records and can be configured for other record types, too.

You don't mention if you're going to be managing volunteers with CiviCRM. There's a video with some information about the CiviVolunteer extension on YouTube
https://www.youtube.com/watch?v=7hkAlLYBc2Q