Vertical decomposition is a widely used general technique for decomposing the cells of arrangements of semi-algebraic sets in R-d into constant-complexity subcells. In this paper, we settle in the affirmative a few long-standing open problems involving the vertical decomposition of substructures of arrangements for d = 3; 4: (i) Let S be a collection of n semi-algebraic sets of constant complexity in R-3, and let U(m) be an upper bound on the complexity of the union U(S') of any subset S' subset of S of size at most m. We prove that the complexity of the vertical decomposition of the complement of U(S) is O*(n(2) +U(n)) (where the O*(.) notation hides subpolynomial factors). We also show that the complexity of the vertical decomposition of the entire arrangement A(S) is O*(n(2) + X), where X is the number of vertices in A(S). (ii) Let F be a collection of n trivariate functions whose graphs are semi-algebraic sets of constant complexity. We show that the complexity of the vertical decomposition of the portion of the arrangement A(F) in R-4 lying below the lower envelope of F is O*(n(3)). These results lead to efficient algorithms for a variety of problems involving these decompositions, including algorithms for constructing the decompositions themselves, and for constructing (1/r)-cuttings of substructures of arrangements of the kinds considered above. One additional algorithm of interest is for output-sensitive point enclosure queries amid semi-algebraic sets in three or four dimensions. In addition, as a main domain of applications, we study various proximity problems involving points and lines in R-3: We first present a linear-size data structure for answering nearest-neighbor queries, with points, amid n lines in R-3 in O*(n(2/3)) time per query. We also study the converse problem, where we return the nearest neighbor of a query line amid n input points, or lines, in R-3. We obtain a data structure of O*(n4) size that answers a nearest-neighbor query in O(log n) time.