Use the RewriteRule pattern to its maximum capabilities (as shown) -- RewriteConds are not processed at all unless the RewriteRule pattern matches (See Rule Processing in Apache mod_rewrite doc for more details).
The -d and -f functions of RewriteCond are very 'expensive' in terms of CPU and server resources, in that they invoke a call to the operating system's file manager to check for file- and directory-exists. In the case where the current filesystem 'map' has been swapped out to disk or is stale, these may in fact invoke a physical disk read operation, which must be completed before the HTTP request handling can proceed any further. As a result, these functions, along with the rDNS lookup invoked by RewriteCond %{REMOTE_HOST} must be avoided except when absolutely necessary; For the exists checke, a good-sized pile of additional "known exclusions" for non-proxied directories and files may be added as RewriteConds to eliminate unnecessary checks before a balance is struck with the comparatively-huge time required to do disk checks.
I do not believe that you need (or want) the check for "directory exists" and I have therefore commented it out in the code below. Even if a slashless URL-path request resolves to an existing directory, you should still redirect that request to the correct, canonical trailing-slash directory URL. This avoids having two URLs (slashed and unslashed) resolve to the same content, known as "a duplicate-content issue" and potentially harmful to search engine rankings.
External redirects should include the protocol and domain, and a 301 or 302 redirect should be stated explicitly.
Use the [L] flag on every rule. The addition of an [L] flag to the redirect below prevents your back-end proxy's existence and URL from being 'exposed' to the client. Similar problems can be avoided by using [L] on all external redirects and placing all redirects before any internal rewrites.
Because you included a leading slash in the pattern of your last rule, I presume that this code goes into your server configuration file, outside of any <Directory> containers. If the code goes into a config file and is enclosed in a <Directory> container, or if it goes into .htaccess, then remove the leading slashes from both RewriteRules, as it will not be present in the requested URL-path 'seen' by RewriteRule.
# Add missing trailing slashes on extensionless URL requests
#
# If the requested URL does not resolve to an existing file
RewriteCond %{REQUEST_FILENAME} !-f
# and if the requested URL does not resolve to an existing directory
# RewriteCond %{REQUEST_FILENAME} !-d
# externally redirect requests without a trailing slash or file extension to add a trailing slash:
RewriteRule ^/(([^/]+/)*[^./]+)$ http://www.example.com/$1/ [R=301,L]
#
# Reverse-proxy all requests to the back-end server
RewriteRule ^/(.*)$ https://back-end.hostname.com/$1 [P]
I modified the comments to reflect what the rules actually do, and to (hopefully) clarify their function.
Jim