I will use the C language to explain this, but the logic applies to most "modern" languages, not just C (so it applies to C#, Java, Python, you name it).
Let's consider the two functions below. They could be implemented in many ways, I'll just do one way for the sake of the argument about return.
int GetSalary()
{
return 100000;
}that will get you the salary of an employee, and
void PrintSalary(int salary)
{
printf("The salary is %d.\n", salary);
return;
}that will print the salary on the standard output.
In GetSalary(), we use the return statement so we can specify what the function should tell the caller about the value of the salary. We specify the return value (int) to be 100,000. Without this, the function would not work.
In PrintSalary(), we may add a return statement at the end of the function to indicate we want to finish the function (or any time earlier, if we want to exit early, e.g. on a condition), but since this function does not return anything (void), the return statement is optional. PrintSalary() would work fine without one.
In other programming languages, such as good old Pascal, GetSalary() was called a function, because it returned a value, but PrintSalary() was called a procedure, because it did not return any value, just did some series of instructions without returning anything to the caller.
I hope this helps. ;)