Adding data to an array in usermeta and displaying it in a loop

Instead of saving the URL of the sideloaded file, save its ID. You can then attach post meta or a tax term to the new attachment indicating its album art.

That way your meta stores the ID of the current cover, and if you want a selection, just show attachments that are images with the associated postmeta indicating they belong to the current post. It will probably be enough to use the parent bit.

This gives you the extra flexibility of using image sizes. I’d advise you do the same for music files.

Use media_handle_sideload to handle your file upload, taken from http://core.trac.wordpress.org/browser/tags/3.4.1/wp-admin/includes/media.php:

258 /**
259  * This handles a sideloaded file in the same way as an uploaded file is handled by {@link media_handle_upload()}
260  *
261  * @since 2.6.0
262  *
263  * @param array $file_array Array similar to a {@link $_FILES} upload array
264  * @param int $post_id The post ID the media is associated with
265  * @param string $desc Description of the sideloaded file
266  * @param array $post_data allows you to overwrite some of the attachment
267  * @return int|object The ID of the attachment or a WP_Error on failure
268  */
269 function media_handle_sideload($file_array, $post_id, $desc = null, $post_data = array()) {

That should give you an attachment from your file upload, and attach it to the specified post. You can then do a selection by showing thumbnails of each cover using a radio selection, with the attachment ID of each cover image as the value.