With the rise of the Internet of Things (IoT), tiny devices capable of computation and data transmission are being deployed across various technological domains. Due to the wide deployment of these devices, manual setup and management are infeasible and inefficient. To address this inefficiency, intelligent procedures must be established to enable autonomy that allows devices and networks to operate efficiently with minimal human intervention. In the traditional client-server paradigm, autonomic computing has been proven effective in minimizing user intervention in computer systems management and will benefit IoT networks. However, IoT networks tend to be heterogeneous, distributed, and resource constrained, mandating the need for new approaches to implement autonomic principles compared to traditional approaches. We begin by introducing the basic principles of autonomic computing and its significance in IoT. We then discuss the self-* paradigm and monitor, analyze, plan, and execute (MAPE) loop from an IoT perspective, followed by recent works in IoT and key enabling technologies for enabling autonomic properties in IoT. Based on the self-* paradigm and MAPE loop analysis from the existing literature, we propose a set of qualitative characteristics for evaluating the autonomy of the IoT network. Finally, we provide a comprehensive list of challenges associated with achieving autonomic IoT and directions for future research.