It is because read_html is a function of xml2 not rvest.
When you call library(rvest), the xml2 package is also loaded, so read_html can be called directly. However, it lives for sure in xml2 and when you want to use this function with :: namespace syntax, you should call it from where it lives, xml2::read_html
Several issues on that in rvest github. I have updated the last one to point to them all and gives answer.
https://github.com/hadley/rvest/issues/200