The need for high-level task planning in robotics is well understood. However, interfacing discrete planning with continuous actions often requires extensive engineering of the solution. For instance, picking up an object may require removing many others that obstruct it. Identifying the exact obstructions requires geometric reasoning which is prohibitively expensive to precompute, with results that are difficult to represent efficiently at the level of a discrete planner. We propose a new approach that utilizes representation techniques from first-order logic and provides a method for synchronizing between continuous and discrete planning layers. We evaluate the approach and illustrate its robustness through a number of experiments using a state-of-the-art robotics simulator, accomplishing a variety of challenging tasks like picking objects from cluttered environments, where the planner needs to figure out which other objects need to be moved first to be able to reach the target object, and laying out a table for dinner, where the planner figures out effective tray-loading, navigation and unloading strategies.