Beh è molto semplice: le parentesi identificano un blocco di istruzioni che vengono considerate come una sola.
Di conseguenza, metterle o non metterle fa differenza solamente quando si ha a che fare con un blocco composto da più di un'istruzione.
Riprendendo il tuo esempio, senza le parentesi nell'istruzione for più esterna, esso sarebbe esattamente equivalente a questo:
codice:
char ch;
  int n;
  
  cout << "\n inserisci un numero naturale ";
  cin >> n;
  cout << "\n inserisci un carattere ";
  cin >> ch;
  for (int i=1; i<=n; i++)
    for (int j=1; j<=i; j++) {
      cout << ch;
      cout << "\n";     
    }
  cout << "\n";
non farti ingannare dall'indentazione: quella serve solo a poter leggere meglio il programma.

Questa è la sintassi dell'istruzione for:
codice:
for (init; test; inc) <istruzione>

dove

init: inizializzazione di una o più variabili;
test: guardia del for, che continua finchè essa rimane vera;
inc: incremento automatico di una variabile;
<istruzione>: una istruzione (sia essa una singola istruzione o un blocco di istruzioni)
Ovviamente per avere un blocco di istruzioni è necessario utilizzare le parentesi graffe.


Ciao.