As in work regardless of whether the user has magrittr loaded, not the formal DESCRIPTION Depends, correct? If the former, @mara's solution—or quite likely the roxygen2 equivalent:
#' @importFrom magrittr "%>%"
—will work. If the latter, magrittr needs to end up in Imports unless you deliberately want to auto-load the whole package for users by putting it in Depends (likely a bad idea due to name clashes). If you want to avoid any dependency, well, you'd have to rewrite the functionality, which would be a waste of effort.
In practice, %>% tends to be re-exported, which can be done in a couple ways, e.g. dplyr/R/utils.r's concise
#' @importFrom magrittr %>%
#' @export
magrittr::`%>%`
or purrr/R/utils.R's more verbose
#' Pipe operator
#'
#' @name %>%
#' @rdname pipe
#' @keywords internal
#' @export
#' @importFrom magrittr %>%
#' @usage lhs \%>\% rhs
NULL
The difference results in different documentation of reexported functions.
Each package only has a single namespace. Hadley's R packages chapter explains the necessities from a package perspective, and his Advanced R chapter on environments offers a deeper dive on how the search path works.