My code has several while loops and if statements and if a certain condition is met then an interrupt will occur. After this interrupt however despite me putting "loop();" at the end, which I hoped would restart the void loop from the beginning like any other interrupt, but instead it restarts from the previous while loop in the code within the void loop.
Is there any function that can restart the code either from the beginning of void setup or void loop?
Is there any function that can restart the code either from the beginning of void setup or void loop?
Directly? No. You can use break or return to get out of the current while/for loop or function, but you must return from every function, to get back to loop().
...and there is some condition in function2 which means you would like to skip function3 and go back to the top to let function1 run again before looking at 2 or 3?
Then function2 should be a boolean instead of void and it should return true if you want 3 to be able to run.
Either way is poor programming practice. Every function should have a name which describes what it does. Adding that return value means its name must change to function2AndPermit3ToRun() which is such an awful name you know you are doing something wrong.
It sounds like you might be trying to call loop() from inside and interrupt.
As @ieee488 said don't!
Interrupts return to wherever they were when the interrupt occurred.
Interrupts are very useful if used correctly but quite often are not necessary and only serve to make programs more difficult to debug. Without your code though and more information on what the program is supposed to do it is hard to comment though.