Implement a stack using a linked list
stack_delete only returns true. If a return value from a function carries no information, better make it void.
There is no consistency in testing parameters. Some functions test for self not being null, other directly proceed to calculating self-&gt;root.
The Stack existence is only justifiable if it has more data members than just root. As @glampert mentioned in comments, tracking size is one of the candidates. On the other hand,  abandoning Stack for good, and letting client manage the root, as in

Node * stack_push(Node * root, data);
....

root = stack_push(root, data);


is also a viable strategy.
It would be nice to provide a non-destructive top() interface to access the root data. There is even a popular belief that a pop-like function should only pop an element from the top of stack (as opposed to pop element and return data); in this school of thought top() is a must.