I just noticed that I missed the core of your question, because I thought it was explained in the article:
We have node players that take the data of a node and do something with it. For example the dialog node player takes the text and the character stored in the dialog node data and spawns a speech bubble with the text.
The players are called as a coroutine by a big loop.
Quick Pseudo code:
IEnumerator PlayQuest (stratNodeData) {
var nextNodeData = startNodeData;
while (nextNodeData != null){
var nodePlayer = GetNodePlayerByNodeDataType (nextNodeData);
yield return nodePlaye.PlayNode(nextNodeData);
nextNodeData = nodePlayer.GetNextNode(nextNodeData); // returns null if nothing is connected
}
}