Eshell is a shell. It is true that programs that need a terminal, such as htop, won’t work in Eshell. However, that is a separate issue.
When you run a command in a shell, it is customary for the shell to first match the command name against its list of built–in commands, and then to search for executable programs in a configured set of directories. By convention, the list of directories to search is stored in an environment variable called PATH. Most users will set this variable by editing a shell startup file, and most operating systems provide some kind of default value that will be used when the user hasn’t done this yet.
But different shells have different startup files. Anytime you try out a new shell, you will find that your customizations from your old shell aren’t there, because they live in a startup file that your new shell doesn’t know about. This is a good thing, because the command syntax and available customizations might differ greatly between shells.
The default shell on OSX is either bash or zsh (I don’t use OSX so I don’t know for sure which.) Bash looks for ~/.bashrc as a startup file, and zsh looks for ~/.zshrc.¹
Eshell doesn’t have a separate startup file; it just uses variables which can be set or configured as part of your Emacs environment. The values of those variables come from your Emacs init file, which is usually ~/.emacs.d/init.el.²
To control the PATH in Eshell, customize the exec-path variable. You can do this by tying M-x customize-variable and then entering exec-path when prompted.
Edit: if this is the sdkman you are asking about, then there is simply no way to run it in eshellthere is simply no way to run it in eshell. It was written entirely in Bash scripts, so it’s not compatible with other shells.
¹: Naturally this is greatly simplified; they both look for multiple files. Check their manpages for the details.
²: Also simplified; see the Emacs manual for details.