How do I make a profile select option on user registration? I thought this was easy but normal fields and media don't seem to do what I want. I can use normal fields, because it is Drupal 8 and the user is an entity. So all I want to be able to do is:

a) show the user a "profile picture" upload option upon registration
b) also allow them to choose one of the 5 pre-existing images I have uploaded
c) easily allow myself as admin to upload more images

Right now I'm thinking of doing a bit of a hack where I simply add an image field, but add another field with custom logic (somehow) that allows the user to choose an image.

But I was hoping someone can suggest something better? Or alternatively, advise perhaps on a way to re-use the image field and add a "choose image" feature to it?

P.s. I am trying to simply allow the user to choose an avatar when signing up. They must just be able to click on the one they like, out of a set of predefined options. If they don't like one, they must be able to upload their own.
Many problems in Drupal can be solved in more than one way. This is also one of them. 

One way might be to use the Avatar Kit module. 

Another might be to create a Select field with options linking to some images you uploaded to the files folder or similar. You'd probably have to do some custom formatting if you wanted to display the options as images, and not just links or text. 

The complication comes in with your request to allow users to upload their own images if they don't like the present choices. Selecting one image from a set is simple enough, and allowing to upload their preferred one is simple enough, but the combination of these options isn't as simple, it's not so common, and requires more logic than is present in the core out-of-box. 

A solution that is flexible and extensible is to create a separate Media Type for these user pictures, and use Entity Browser module to build a great user experience when filling their profile forms where they can choose from a set of images you chose, or are allowed to upload a new one. This solution isn't the easiest to implement though, or at least isn't to someone who expects these features should come out-of-box. 

You have to think about the images uploaded by users, are they available to all users to use or are they limited to the person who uploaded the image? This affects how you structure your Media type, different access treatment usually means you need a separate structure for it.