In Org mode, to create a hyperlink which points to an internal target, such as heading, table, bookmark, etc., in a local LibreOffice document, should be an URL instead of an absolute or relative file system path, otherwise it cannot be opened by the libreoffice program.

To generate such an URL, the path to the local LibreOffice file should be converted to an absolute one and prefixed with file://. The target in the LibreOffice document for linking should be appended to the URL in the form #<target-name>|<target-category>.

The <target-name> can be checked within LibreOffice’s navigator. If it contains white spaces, it should be converted to the URL encoding. This can be helped with this elisp function:

(defun tjh/url-encode-region (start end)
  "Replace the selected text with its URL-encoded equivalent."
  (interactive "r")
  (require 'url-util)
  (let ((encoded (url-hexify-string (buffer-substring start end))))
    (delete-region start end)
    (insert encoded)))

The <target-category> can be outline, table, figure, etc.

A new link type libreoffice can be created in Org as below.

;; Open a LibreOffice file with specified internal target, i.e. with pinpoint
;; accuracy.
(defun tjh/open-libreoffice-file-target (url)
  (start-process "LibreOffice file target" nil "libreoffice" (concat "file://" (url-encode-url (expand-file-name url)))))

;; Completion for inserting the LibreOffice link, which is copied from
;; org-link-complete-file.
(defun libreoffice-link-complete-file (&optional arg)
  "Create a file link using completion."
  (let ((file (read-file-name "LibreOffice: "))
        (pwd (file-name-as-directory (expand-file-name ".")))
        (pwd1 (file-name-as-directory (abbreviate-file-name
                                       (expand-file-name ".")))))
    (cond ((equal arg '(16))
           (concat "libreoffice:"
                   (abbreviate-file-name (expand-file-name file))))
          ((string-match
            (concat "^" (regexp-quote pwd1) "\\(.+\\)") file)
           (concat "libreoffice:" (match-string 1 file)))
          ((string-match
            (concat "^" (regexp-quote pwd) "\\(.+\\)")
            (expand-file-name file))
           (concat "libreoffice:"
                   (match-string 1 (expand-file-name file))))
          ;; N.B. Since a local LibreOffice document is linked, the relative
          ;; path is preferred.
          (t (concat "libreoffice:" (file-relative-name (expand-file-name file)))))))

;; Set the behavior of opening the LibreOffice link and inserting the link with
;; completion.
(org-link-set-parameters
 "libreoffice"
 :follow 'tjh/open-libreoffice-file-target
 :complete 'libreoffice-link-complete-file)

N.B. For me there is no need to modify the link’s export behavior, because when I export the Org file to LaTeX PDF, the link format generated by the default export back-end is effective when it is clicked from a PDF viewer.