A function is an independent routine which can perform I/O in some form.
It is a section of code, which can be directly inserted into a program with no modification, and should be able to be assigned/named/referred to in some way.
It should be able to run independent of surrounding code.
It should be able to take input/output in some form.
The function should be able to perform a successive chain of operations. Meaning these "functions" should be able to somehow be used in a program to fulfill the definition of one. A function only capable of doing a single binary operation wouldn't be valid unless, recursion or some other way for a successive operation to be performed exists
A functions call should not require calling any other functions or code besides defining the input. A function should receive the input in a format that's is compliant with the challenges rules
A function should have a way for he input to be directly passed to it (it doesn't have to take input in that way, just the functionality should be available)
That said, if it's blatantly obvious it's not a function, it's not a function.
Also as @Mego said:
Python has functions. Anything else is not a function. The further explanations in the answer are intended to be used for languages that don't have a cut-and-dry definition of a function
We know what a function is. It's futile calling what's not a function a function, it's very difficult to come up with a perfectly objective set of rules describing what a function is, but we all know what a function is, and what it is not.
If the language formally defines it to be a function/method/lambda, it's a function. this doesn't mean an esolang creator abusing their ability to define a function, is exempt from rules and other restrictions applied upon programs and functions.
In your question you asked if
gotos could be considered functions. IIRC, they can't have I/O passed directly through them, so no.