SYSPRINT is usually what is called a DD name, as in
//SYSPRINT DD SYSOUT=A
The use of SYSPRINT as a DD name as a more or less standard way to define a print oriented data set probably came about by accident. It was used this way by quite a few IBM programs, so user programs picked up on this "standard" to sort of ape the IBM programs. The actual DD name used by a program is defined by the program; there is no formal standard. It was the only way for a program to influence its environment, though not to define or alter its environment.
SYSOUT is more complicated. It is sometimes used as a DD name, like SYSPRINT. The major SORT packages are the major users of SYSOUT as a DD name, though there are other users.
The other use of SYSOUT is as JCL parameter to declare that a DD statement defines a data set that is to be transferred to a printer or (very rarely, now) a card punch. The SYSOUT parameter usually specifies an output class; A is almost always a printer, but the true definition is site specific. It can also specify the name of a program used to help write the data while it is being printed, though this use is infrequent, and the identification of the type of paper used when printing output. At least one major output management product (CA-Dispatch) uses the writer program name to indicate the report ID used by the product for its purposes.
You have to realize that the purpose of JCL is to define the environment for programs. In the original definition of OS/360, JCL was the only way to define this environment; there was no well defined way for a program to alter its environment once it started running. This is no longer true, but it took quite a long time before there was a formal mechanism for a program to alter its execution environment. In the original OS/360, there was nothing like the C language function fopen("filename", "option"). What you had was more like fopen("dd:dd-name","option"), though it was done differently.