The parameters on any compound template (Page Template, Component Template or Template Building Block) are available to the building blocks inside that template. So the building blocks inside the compound can either specify their own value for the parameters or they can simply use the value that they get from their PT/CT/TBB. When used like this, the container (compound CT/PT/TBB) specifies the default value for the parameter of the building block inside it.
You can see a good example of this in the Binaries target structure group (sg_TargetStructureGroup) parameter on the Default Finish Actions. The Default Finish Actions is a Compound Template Building Block, which in itself performs no actions and thus has no need for any parameters. But by specifying the Images SG parameter on the Default Finish Actions, it is automatically available to the "Publish Binaries in Package" TBB inside it.
So parameters on Component Templates and Page Templates are (like parameters in compound Template Building Blocks) most useful to capture parameters for the building blocks inside them at a higher level.
There is nothing in Tridion to keep you from coming up with your own template language for page and component templates - or allowing the use of your own favorite program language (cough C# cough) as a page or component template.
In such a case you will probably find a much more direct use-case than with the very simple compound template that SDL delivery with Tridion out of the box.
Apparently memory is a tricky things and there is no way to specify the parameter values for a compound page and component template in Template Builder. But when you open a compound Template Building Block, you can specify values for its parameters. These then serve as default values for the building blocks within it.