I/O refers to input/output. It can be anything ranging from reading/writing local files to making an HTTP request to an API.
Single threaded event loop refers to the call stack which executes one operation at a time by popping calls from the stack.
Event driven refers to the fact that everything that happens in NodeJS is a response to an action.
Non-blocking I/O means that it can make multiple requests asynchronously and does not need to wait for one to return before initiating the next. (This part requires multiple threads).
When an asynchronous call reaches the call stack, it gets popped and then waits to complete, upon completion it enters the callback queue and is unshifted back on to the call stack once all other processes have been popped.