Callback functions are functions passed as arguments to other functions and are executed once the asynchronous operation is completed. They are commonly used in older asynchronous patterns (such as callbacks in setTimeout() or XMLHttpRequest) but are gradually being replaced by promises and async/await due to the callback hell problem, where multiple nested callbacks lead to difficult-to-read code.