Regex is certainly a powerful language, but it can take study and practice to master.
Here is an attempt at an approach based on string splitting, only on exact matches, first on bracket going one way, and then bracket going the other way. i used fixed=TRUE parameter, to explicitly not use Regex style pattern, but exact symbol matching.
library(tidyverse)
library(purrr)
single_cell <- "Pencil (1992) Texas, Toiler Paper (1983) New Jersey, Lasers and Lasagna (2020), Windshield Wiper Fluid (2002) New York City"
split1<- strsplit(single_cell,")",fixed=TRUE)[[1]]
split2<- map(split1, ~ strsplit(.,"(",fixed=TRUE)[[1]][[1]])
result <- unlist(split2) %>% enframe(name=NULL)
> split1
[1] "Pencil (1992" " Texas, Toiler Paper (1983"
[3] " New Jersey, Lasers and Lasagna (2020" ", Windshield Wiper Fluid (2002"
[5] " New York City"
> split2
[[1]]
[1] "Pencil "
[[2]]
[1] " Texas, Toiler Paper "
[[3]]
[1] " New Jersey, Lasers and Lasagna "
[[4]]
[1] ", Windshield Wiper Fluid "
[[5]]
[1] " New York City"
> result
# A tibble: 5 x 1
value
<chr>
1 "Pencil "
2 " Texas, Toiler Paper "
3 " New Jersey, Lasers and Lasagna "
4 ", Windshield Wiper Fluid "
5 " New York City"