The 'return' statement is not a function call. It is actually the opposite. Instead of calling another function, so that a new function gets added to the call stack, it causes the current function to exit, as if the end of the function block had been reached. This causes the current function to get removed from the call stack. For this reason, any code written after an unconditional return statement is unreachable and will never get executed.
Functions with a return type of void (=nothing) do not require a return statement. There is an implicit return statement at the end of the function block that causes control to be returned to the calling function. In the case of the function main, the calling function (normally) belongs to the operating system.
However, if the return type is not void, then the function must return a value, so you require an explicit return statement. Since the C standard requires main to return an int, you have to explicitly return a value with a return statement, if your code is to be compliant with the standard. However, some compilers also accept void as a return value, although this is not part of the C standard.