You’re mixing a bit of syntax there. Given that you always want to run visual-fill-column when you run visual-line-mode, I’d recommend to use the following use-package:
(use-package visual-fill-column
:ensure t
:hook
(visual-line-mode . visual-fill-column-for-vline)
:config
(setopt visual-fill-column-width 120))
Note that there is no :defer necessary if you use :hook. But: :hook should only be used if the function that is called is defined by the package.
So, next up, let’s customize visual-wrap-prefix-mode:
(use-package visual-wrap
:ensure nil
:config
(setopt visual-wrap-extra-indent 4))
And last but not least, let’s customize tex:
(use-package tex
:ensure auctex
:mode (“\.tex\'” . LaTeX-mode)
:config
(add-hook 'LaTeX-mode-hook #'visual-line-mode)
(add-hook 'LaTeX-mode-hook #'visual-wrap-prefix-mode))
Here, we have to use add-hook, because the called function is not provided by auctex. Now, if you always want to use visual-wrap-prefix-mode whenever you use visual-line-mode, then it gets a bit easier:
;; visual-fill-column's package definition stays as-is
(use-package visual-wrap
:ensure nil
:hook
(visual-line-mode . visual-wrap-prefix-mode) ; always use wrap-prefix
:config
(setopt visual-wrap-extra-indent 4))
(use-package tex
:ensure auctex
:mode (“\.tex\'” . LaTeX-mode)
:config
(add-hook 'LaTeX-mode-hook #'visual-line-mode)) ; second hook removed
Now, with all that said, I think that this is not quite correct. While visual-line-mode can work together with visual-wrap-prefix-mode, you can use the latter without the former and then get hints in the fringes about the continuation, which you may prefer. However, the authors of visual-fill-column have bound visual-fill-column-for-vline to visual-line-mode’s variable value, so you would have to do that yourself.