INCLUDE groups and procedures are very similar. From the
JCL Reference manual:
18.1.7 Considerations for Using INCLUDE Groups
System and private libraries can contain both procedures and INCLUDE groups. The order in which the system searches system and private libraries for INCLUDE groups is the same as the search order used for procedures (see "Using a Procedure" in topic 5.1.3).
INCLUDE groups cannot contain the following JCL statements:
JOB statements
PROC and PEND statements
JCLLIB statements
JES2 and JES3 statements and commands
DD * and DD DATA statements
Do not define procedures in an INCLUDE group. However, you can put EXEC statements that invoke procedures in an INCLUDE group.
You can use INCLUDE statements to imbed INCLUDE groups that contain DD and OUTPUT JCL statements, which allows you to use the same data set definitions for various jobs.
When the INCLUDE statement and the INCLUDE group contain symbolic parameters, the system substitutes the values that are current at the time the symbolic parameter is encountered. Values assigned to symbolic parameters in an INCLUDE group (such as with the SET statement) are valid for use on subsequent JCL statements.
and
5.1.3 Using a Procedure
To execute a procedure, call it on an EXEC statement in an in-stream job. Specify the name of the procedure in the PROC parameter of the EXEC statement. The step uses the JCL statements in the procedure as if the JCL statements appeared in the input stream immediately following the EXEC statement. If necessary, you can modify the procedure for the current execution of the job step.
When you call a procedure, the system retrieves it using the following search order:
From the input stream
If the called procedure is an in-stream procedure, the system retrieves it from the job input stream. You must place the in-stream procedure before the EXEC statement that calls it.
From a private library
If the called procedure is cataloged in a private library, the system retrieves it from the private library that you specify on the JCLLIB statement that appears earlier in the job stream.
From the system library (in a non-APPC scheduling environment)
If the called procedure is cataloged in a system library, the subsystem retrieves it as follows:
In JES2, from the library name on the PROCLIB= parameter on a JES2 /*JOBPARM statement. See "/*JOBPARM Statement" in topic 27.3 for more information.
In JES3, from the library name on the PROC= parameter of the JES3 //*MAIN statement. See "//*MAIN Statement" in topic 28.8 for more information.
In MSTR, the data set specified by the IEFPDSI DD statement in the currently active master JCL is searched for procedures. The default master JCL specifies SYS1.PROCLIB.
Difference 1: an INCLUDE group cannot contain PROC or PEND whereas a procedure can contain them
Difference 2: an INCLUDE group must be external whereas a procedure can be in-stream
Difference 3: procedures are allowed to include JES statements and INCLUDE groups cannot
These aren't the only differences but they're enough to clarify the issue.