Assuming all the files are located in the same folder and excluding any logic about cleaning up the files after they've been emailed - this is how I would achieve what you're after.
Note that this will also work regardless of how many files are in the same folder as it will look for 4 specific file names including the extension.
Below is the full flow. I'll go into each of the actions.

Within the Do until loop:

And within the Yes and No branches:

Recurrence would be set to when you want to start each day which you said was 4AM.

Initialize variable File Count (fileCount) will track how many files were found. We will keep looping until we find all 4 of them.

Initialize variable Attachments (attachments) will contain all the attachments once all 4 files are found.

Do until will keep going until fileCount is equal to 4 (we've found our 4 files). However, we have also set the limits so that it will stop if it runs 24 times or for 6 hours (PT6H). This will handle your last requirement where you want to cancel after a certain period of time. Note that I've set it for 24 times because we have a Delay within the loop of 15 minutes (will try to find the files every 15 minutes, or 4 times an hour) which equates to 24 times over 6 hours (same as the 6 hour limit we specified).

Get files (properties only) will retrieve all files within a specific folder where the filename (including extension) is equal to one of my 4 file names I'm looking for. We use FileLeafRef for this in our Filter Query. In my example I'm looking for 4 documents called Test 01.docx, Test 02.docx, Test 03.docx, and Test 04.docx.
FileLeafRef eq 'Test 01.docx' or FileLeafRef eq 'Test 02.docx' or FileLeafRef eq 'Test 03.docx' or FileLeafRef eq 'Test 04.docx'

It will then set the fileCount variable to the length of items returned. We use the following expression for this:
length(outputs('Get_files_(properties_only)')?['body/value'])
Condition checks if fileCount is equal to 4 (found all our files).

If the result is No (not 4 files found) then we set a Delay of 15 minutes. After the delay it will go back to the start of the Do until and run through again.

If the result is Yes (we have found our 4 files) then we do the following:
Apply to each will loop over each of our 4 files.

Get file content will get the file content using the Identifier field.

We then append to the attachments array an object with the Name and Content.

The expression for the object is:
{
"Name": @{items('Apply_to_each_file')?['{FilenameWithExtension}']},
"ContentBytes": @{body('Get_file_content')}
}
Lastly, after the Apply to each, we use Send an email to send the email with the 4 attachments. To add the attachments, we click on Show advanced settings, then for the Attachments, click on the button on the right, then select the attachments array.

The email should look something like:

And below is the Document Library Folder that contains 5 files, but it only picked up the ones that I specified in my Filter Query.

Again, I'm not sure what you then do with your files in the folder. Do you clear them out ready for the next day?