That is a struct of elfeed-entry (defined by elfeed). The #s here means struct. The first one is for elfeed-entry, the second is for elfeed-ref.
(cl-defstruct website name shortname url shorturl)
(make-website :name "StackOverflow"
;; => #s(website "StackOverflow" nil "https://stackoverflow.com/" nil)
While waiting for a better answer, I wrote a with-slots macro that seems to work with defstruct instances:
(defmacro my-with-slots (class-name slots obj &rest body)
"Bind slot names SLOTS in an instance OBJ of class CLASS-NAME, and execute BODY."
(declare (indent 3))
,(cl-loop for slot in slots
Your tern package was compiled with the older Emacs, but the newer Emacs has changed the representation of structs: the [cl-struct-url http nil nil 127.0.0.1 39585 / nil nil nil nil t] in your error message is an "old-style" struct, returned by the old url-parse-make-urlobj. This happens because this function was inlined when tern was compiled.
You can try ...
(package-load-descriptor DIRECTORY) will read the *-pkg.el file in the given directory, create a new package-desc structure object, add it to package-alist and return the object.
That seems to cover what you need, with the possible exception of it modifying package-alist (which you may or may not want to happen). It's actually the call to package-process-...