Upload file on pre_update_option_{option_name}

I’m quite sure the problem is not with the WordPress hook you’re using. Instead, the following:

Cannot find $_FILES, in $_POST, there’s the filename

.. is most likely because your form tag (<form>) does not have the required enctype attribute which must be set to multipart/form-data to make file upload input works in that the file gets uploaded to the server — without setting the enctype to multipart/form-data, the input still works (i.e. you can select a file that you want to upload), but it’ll work like a standard input field where the browser submits only the file name (e.g. my-image.png) and not the actual file itself (which PHP puts in the $_FILES).

So make sure your form tag has the attribute enctype="multipart/form-data":

<form method="post" action="options.php" enctype="multipart/form-data">
    ...
</form>