This is a reply to all the questions in this post:
1. For Matthew - passing a function to a field for a Sublayer's renderer was never supported. The reason for this is because MapImageLayer renderers are created server-side, so passing a JS function to the server wouldn't make sense for this particular layer, not to mention introduce security vulnerabilities. This was a documentation error on our part. I apologize for that confusion.
2. For Matthew and Aaron - Similarly, WebGL rendered feature layers also never supported functions in renderers.
As noted by the error message, in both of those scenarios the renderer needs to be serialized at some point in our rendering pipeline. In WebGL this is required when passing information from the main thread to workers, and back to the main thread. So we didn't commit to supporting JS functions in renderers at that point.
Regarding access to additional data in Arcade - that functionality is coming. We hope to have it released in Arcade by the end of the year. That will provide you with access to other features within your layer and other layers in your map. If you need to access parameters from your application for your Arcade, you can already do this by constructing the Arcade with JavaScript then passing it to your renderer. This blog addresses one possible use case for this: https://www.esri.com/arcgis-blog/products/js-api-arcgis/mapping/generate-arcade-expressions-for-data...
And the limitation on Sublayer saying that Arcade expressions aren't supported in renderers and popups is incorrect. I apologize again for that miscommunication in the documentation. This sample demonstrates both cases: renderer with arcade and popupTemplate with Arcade in a Sublayer: MapImageLayer - Explore data from a dynamic workspace | ArcGIS API for JavaScript 4.8
I hope all this information helps!