Cosa c'è di sbagliato?
codice:
Node<int>* nodx;
nodx.value = 20;
cout<<nodx<<endl;
nodx è un puntatore a un oggetto, non un oggetto. E gli operatori voglio oggetti, non puntatori a oggetti (presumo che nodx.value = 20 sia un errore di battitura dell'esempio).

Questo è corretto.
codice:
Node<int>* nodx;
nodx->value = 20;
cout<< (*nodx) <<endl;
Poi devi ritornare lo ostream.
codice:
template <typename T>
class Node 
{
	/* Overload operatori di streaming */
	friend ostream & operator<<(ostream &out, const Node &node) {
            out<<node.value;
            return out;
        }
}