The main motivation behind a using a non-blocking call is that you are waiting for some external process or device to return, so you release control of the thread to allow other operations to run "while you wait".
Because non-blocking/asynchronous code using callbacks is more difficult to write, read, and maintain you should avoid non-blocking code except where it will make a difference in the performance and scalability of your application, or where it is required by an API you are using.
Consider this relatively silly example:
function add(a,b,cb) { cb(a+b); }
console.log('2+2 is', add(2,2)); // -> 4
function add(a,b) { return a+b; }
add(2,2,function(sum) { console.log('2+2 is', sum); }); // -> 4
The first one is a fair bit easier on the eyes.
Many node APIs have an asynchronous version but no syncronous version. When using those APIs it will be obvious that you need to make your code asynchronous.
In cases where you have a choice (as when reading a file) ask yourself: "Will a blocking call make the end-user wait for an unreasonable amount of time?". During application startup the answer is generally "no" because that code only runs once and the end users haven't had the chance to touch the server. However, if you are responding to a web request then making all users wait for an outbound API call or disk read will slow down the site for all the users, whereas a non-blocking call allows node to continue processing new requests until the data you requested comes back.